[英]create unique value and push to array in 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 > 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)
}
}
这段代码有什么错误?
是的,你是对的。 这是一个无限循环。
问题是行pass = (Math.floor(Math.random() * (10 - 6 + 1)) + 6)+'a';
. 这只会生成 5 个值之一。 pass
将永远是
因为你的数组有 10 个元素长,但你只用 5 个可能的元素填充它,你永远无法用所有独特的元素填充它。 所以它会 go 进入一个无限循环,试图生成唯一元素但永远找不到唯一元素。
您需要重写 pass 的计算以生成 5 个以上的唯一元素。 尝试pass = (Math.floor(Math.random() * 10))+'a';
和 go 从那里。
let arr = [(Math.floor(Math.random() * (10)))+'a']; for(let i=0; i<=10;i++) { let k = 0; let pass = (Math.floor(Math.random() * (10)))+'a'; while(k < arr.length){ k++; if(arr.indexOf(pass) > -1){ pass = (Math.floor(Math.random() * (10 - 6 + 1)) + 6)+'a'; }else { arr.push(pass); break; } } } console.log(arr)
在您的条件下,变量 k 始终 > 0 并且它无限循环。
编辑1:
答案基于@Mathew 答案更新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.