var fun2 = function(n, k) { var returnArr = [] returnArr[0] = Math.ceil(Math.random() * n) var template = 0 for (let i = 1; i < k; i ++) { template = Math.ceil(Math.random() * n) for(let j = 0; j < returnArr.length; j ++) { if(template === returnArr[j]) { i -- break } else { returnArr.push(template) } } } return returnArr } fun2(10,5)为撒呢?
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
1, 产生0~n的数组range(n)。
2, 产生同长度的随机数。
3, 用产生的随机数作为key去排序range(n)
4, 取出前k个。其实想从哪个位置取都可以。
var arr = new Array()
for (var i = 0; i< 10; i++) {
arr.push({k:Math.random(),v:i});
}
var sortbykey = function (a,b) {return a.k-b.k;}
arr.sort(sortbykey);
for (var i = 0; i< 5; i++) {
console.log(arr[i].v);
}
还是有random.shuffle好
蓝山帝景
TA贡献1843条经验 获得超7个赞
都在秀解发,我来说下题主代码为啥会 死循环 + 爆内存
因为你在数组for循环里又push东西到数组里了啊,这个动作很危险,弄不好就死循环了。不巧你这个代码就撞上了。。。
加断点单步调试一下你就会发现,题主的循环跳不出去啊,因为本来循环要结束了,又push一个元素进去了,好吧,继续循环,又导致 if(template === returnArr[j]) 成立了,结果 i-- 了,又导致外层循环继续。悲剧。
添加回答
举报
0/150
提交
取消