在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
您需要重写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我在这个例子中得到了这个数字生成部分,却忘了考虑它的结果