Javascript生成10个20~200之间的随机数

这里的exists =false, exists = true;
是怎么实现去重的呢?

var arr = new Array();
while(arr.length < 10){
    var num = Math.round(180*Math.random()) + 20;
    var exists =false;
    for(var i=0,l=arr.length;i<l;i++){
        if(arr[i]==num){
            exists = true;
        }
    }
    if(!exists){
        arr.push(num);
   }
}
arr.sort(function(a,b){
    return a-b;
});
console.log(arr.join(","));
阅读 6.6k
5 个回答

可以考虑用ES6的set集合,自带去重功能,还是hash结构,效率比indexOf更高

let set = new Set();
while(set.size<10){
    set.add(Math.round(180*Math.random()) + 20);
}
let arr = Array.from(set);

把while拆开看、一层一层走一遍就知道他是如何去重的了啊

每次进入while exists的默认值都是false、arr是外部的、不存在重新赋值

判断到arr有存在的、就变为true、true就不会走push的哪一行代码

var arr = new Array();
while(arr.length < 10){
    var num = Math.round(180*Math.random()) + 20;
    var exists =false;
    for(var i=0,l=arr.length;i<l;i++){
        if(arr[i]==num){//判断是否已经存在
            exists = true;//存在的话将true传给exists
        }
    }
    if(!exists){//现在exist是true,!exists就是false,所以不执行这个if下面代码。
        arr.push(num);
   }
}
arr.sort(function(a,b){
    return a-b;
});
console.log(arr.join(","));

var exists =false;
for(var i=0,l=arr.length;i<l;i++){

if(arr[i]==num){
    exists = true;
}

}
if(!exists){

arr.push(num);

这段代码可以替换为:
arr.indexOf(num) === -1 && arr.push(num);

for循环旨在查找生成的随机数是不是已经生成过。

每次生成会初始exists,当查找已经生成这个数,将exists置为false

false代表生成的数是重复的

建议在 exists = true 后面加一个 break;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏