关于去重的时候,数组长度会不一致的问题

来源:4-7 编程练习

清丶辞

2017-11-13 16:45:53

var arr = [];

var newArr = [];

function getRandomNums(n,m){

var nums = Math.floor((m-n+1)*Math.random());

return nums;

}

for(var i=0;i<10;i++){

arr.push(getRandomNums(0,100));

if(newArr.indexOf(arr[i]) == -1){

newArr.push(arr[i]);

}else{

newArr.push(getRandomNums(0,100));

}

}

console.log(newArr.sort(function(a,b){return b-a}));


本身我没有写else,但是发现按照代码判断来说,如果随机出来的数和之前数组中的数做比较的时候,如果是已经存在的了,那么if判断中也没有做任何的操作,因此导致数组的长度会不同。所以我在else中加了一句,意思就是如果随机出来的数和之前的数一致,那么我的新数组中直接再随机一个数。但是这样会存在隐患。

我的问题是:

1、为什么数组的长度不同,只会是9个数或者10个数?难道不存在2次或2次以上的同样的数出现?是否是因为数量太少导致几率太小的原因。

2、因为在else中再直接调用随机函数,存在的隐患就是万一随机出来的还是同样的数,岂不是去重操作就白费了?有没有其它办法?因为我实在没有想出来。

麻烦助教老师解答一下,谢谢。

写回答

1回答

好帮手慕糖

2017-11-13

你好,1、因为随机这种的几率本身就很少,也可以测试,出现9的次数相对来说也不太多。

2、这里建议:可以尝试使用递归函数来测试下哟,再次相同的时候,就再次调用函数从新执行一次。

祝学习愉快~

0

0 学习 · 640 问题

查看课程