Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中创建唯一值并推送到数组_Javascript - Fatal编程技术网

在javascript中创建唯一值并推送到数组

在javascript中创建唯一值并推送到数组,javascript,Javascript,我需要创建一个具有唯一值的数组。在这里,如果创建的值包含在该数组中,则需要创建另一个值,并且再次需要检查该数组中是否存在新创建的值,如果再次存在,则需要执行相同的检查 这是我尝试过的代码,如果我执行这个,我认为无限循环场景正在发生 let arr = []; for(let i=0; i<10;i++) { let k = 1; let pass = (Math.floor(Math.random() * (10 - 6 + 1)) + 6)+'a'; while(k >

我需要创建一个具有唯一值的数组。在这里,如果创建的值包含在该数组中,则需要创建另一个值,并且再次需要检查该数组中是否存在新创建的值,如果再次存在,则需要执行相同的检查

这是我尝试过的代码,如果我执行这个,我认为无限循环场景正在发生

let arr = [];
for(let i=0; i<10;i++) {
  let k = 1;
  let pass = (Math.floor(Math.random() * (10 - 6 + 1)) + 6)+'a';
  while(k > 0){
    k++;
    if(arr.indexOf(pass) > -1) {
      pass = (Math.floor(Math.random() * (10 - 6 + 1)) + 6)+'a';
    } else {
      arr.push(pass);
      break;         
    }
   
    console.log(arr)
  }
}
让arr=[];
for(设i=0;i=0){
k++;
如果(arr.indexOf(通过)>-1){
pass=(Math.floor(Math.random()*(10-6+1))+6)+'a';
}否则{
arr.push(通过);
打破
}
控制台日志(arr)
}
}

代码中的错误是什么?

是的,你是对的。这是一个无限循环

问题是行
pass=(Math.floor(Math.random()*(10-6+1))+6)+'a'。这将只生成5个值中的一个<代码>通过
将只会

  • 6a
  • 7a
  • 8a
  • 9a
  • 10a
因为你的数组有10个元素长,但是你只填充了5个可能的元素,所以你永远无法用所有唯一的元素填充它。因此,它将进入一个无限循环,试图生成唯一的元素,但从未找到唯一的元素


您需要重写pass的计算以生成5个以上的唯一元素。尝试
pass=(Math.floor(Math.random()*10))+'a'然后从那里开始。

是的,你是对的。这是一个无限循环

问题是行
pass=(Math.floor(Math.random()*(10-6+1))+6)+'a'。这将只生成5个值中的一个<代码>通过
将只会

  • 6a
  • 7a
  • 8a
  • 9a
  • 10a
因为你的数组有10个元素长,但是你只填充了5个可能的元素,所以你永远无法用所有唯一的元素填充它。因此,它将进入一个无限循环,试图生成唯一的元素,但从未找到唯一的元素

您需要重写pass的计算以生成5个以上的唯一元素。尝试
pass=(Math.floor(Math.random()*10))+'a'并从那里开始。

让arr=[(Math.floor(Math.random()*(10)))+'a'];
for(设i=0;i-1){
pass=(Math.floor(Math.random()*(10-6+1))+6)+'a';
}否则{
arr.push(通过);
打破
}
}
}
控制台日志(arr)
让arr=[(Math.floor(Math.random()*(10)))+'a'];
for(设i=0;i-1){
pass=(Math.floor(Math.random()*(10-6+1))+6)+'a';
}否则{
arr.push(通过);
打破
}
}
}

console.log(arr)
首先,
(Math.floor(Math.random()*(10-6+1))+6)
将为您提供一个从6到10的数字(如果我没有弄错的话),其次,如果在5个unique上生成,您希望数组中有10个唯一的项吗?第三,问题是这里的
k>0
它是一个无限循环。你的第三点是正确的一半。k>0进入无限循环的唯一原因是它从来没有到达断点。首先,
(Math.floor(Math.random()*(10-6+1))+6)
将为您提供一个从6到10的数字(如果我没有弄错的话),其次,如果在5个唯一项上生成,您希望数组中有10个唯一项吗?第三,问题是这里的
k>0
它是一个无限循环。你的第三点是正确的一半。k>0进入无限循环的唯一原因是它从未到达断点。这是正确的一半。如果它碰到了断点,它就会退出循环。问题的根源在于它没有持续地达到突破点。这是正确的一半。如果它碰到了断点,它就会退出循环。问题的根源在于它没有始终达到临界点。谢谢你的答案,我的错:D我在这个例子中得到了这个数字生成部分,却忘了考虑它的结果谢谢你的答案,我的错:D我在这个例子中得到了这个数字生成部分,却忘了考虑它的结果