防止在数组中添加相同的随机值



我正在制作一个功能,将随机索引添加到具有for循环的数组中,值必须始终不同,但不知何故,有时(大约每10个函数调用)相同的值,即使我试图从answerId-array中过滤相同的值,并将其余值放在-array unique,并检查unique-array和具有相同长度的原始answerId-array过滤, 如果unique数组长度小于 unique 数组长度,则将更改answerId s 值。但是这些数组总是具有相同的长度,即使answerId数组中有相同的值,并且运行不能传递给其余的for循环(这些for循环是相当多的黑客代码)。我做错了什么?对不起,如果我的英语水平不好。

getJSONData(){
  var answerId = [null, null, null, null];
  var length = Object.keys(Company.person).length;
  for(var i = 0; i <= answerId.length - 1; i++){
    answerId[i] = [Math.floor(Math.random() * length)]
  }
  let unique = Array.from(new Set(answerId))
  console.log(unique.length)
  if (unique.length < answerId.length){
    for(var i = 0; i <= answerId.length - 1; i++){
      answerId[i] = [Math.floor(Math.random() * length)]
    }
    console.log("new values 1")
    unique = Array.from(new Set(answerId))
    if (unique.length < answerId.length){
      for(var i = 0; i <= answerId.length - 1; i++){
        answerId[i] = [Math.floor(Math.random() * length)]
      }
      console.log("new values 2")
      unique = Array.from(new Set(answerId))
      if (unique.length < answerId.length){
        for(var i = 0; i <= answerId.length - 1; i++){
          answerId[i] = [Math.floor(Math.random() * length)]
        }
        console.log("new values 3")
        unique = Array.from(new Set(answerId))
        if (unique.length < answerId.length){
          for(var i = 0; i <= answerId.length - 1; i++){
            answerId[i] = [Math.floor(Math.random() * length)]
          }
          console.log("new values 4")
        }
      }
    }
  }
  var personArray = [Company.person[answerId[0]].firstName + ' ' + Company.person[answerId[0]].lastName, Company.person[answerId[1]].firstName + ' ' + Company.person[answerId[1]].lastName, Company.person[answerId[2]].firstName + ' ' + Company.person[answerId[2]].lastName, Company.person[answerId[3]].firstName + ' ' + Company.person[answerId[3]].lastName];
  return personArray;
}

可以直接将 Setsize 属性一起使用,以检查结果集的所需大小。

var array = [0, 1, 42, 17, 22, 3, 7, 9, 15, 35, 20],
    unique = new Set;
while (unique.size < 4) {
    unique.add(Math.floor(Math.random() * array.length));
}
console.log([...unique]); // indices

否则,您可以使用哈希表。

var array = [0, 1, 42, 17, 22, 3, 7, 9, 15, 35, 20],
    unique = {},
    id = [],
    i;
while (id.length < 4) {
    i = Math.floor(Math.random() * array.length);
    if (!unique[i]) {
        id.push(i);
        unique[i] = true;
    }
}
console.log(id);

正如我理解你的问题,你想从数组中获取 N 个随机值,值应该是唯一的。你只是洗牌你的数组并从中得到前 N 个值。

相关内容

  • 没有找到相关文章

最新更新