【发布时间】:2017-04-29 07:49:39
【问题描述】:
我正在尝试复制数组中的偶数,并在同一个 for 循环中随机化新复制的元素:
var arr=[0,1,2,3,4,5,6,7,8];
var arr2=[];
for(var i=0;i<arr.length;i++){
if(arr[i]%2==0){
arr2.splice(Math.random()*arr2.length,0,arr[i]);
}
}
document.write(arr2);
概念很简单:在新数组的随机位置插入新复制的元素,但是serval输出表明它不正确:
2,6,4,8,0
4,8,6,2,0
6,2,8,4,0
最后总是有 0。代码有什么问题?还是我的概念错了?
【问题讨论】:
-
你不需要循环。您可以在 one 简洁的代码行中使用
.filter(), .sort(), and Math.random()。 stackoverflow.com/questions/41134857/… -
获取偶数索引列表(简单)。 Shuffle that list randomly。然后在复制时使用这些索引访问源数组。这种方法保证每个元素都被复制,并且没有元素覆盖另一个元素。
标签: javascript arrays algorithm for-loop random