关于去重的时候,数组长度会不一致的问题
来源: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、这里建议:可以尝试使用递归函数来测试下哟,再次相同的时候,就再次调用函数从新执行一次。
祝学习愉快~
相似问题