【发布时间】:2011-09-10 14:05:37
【问题描述】:
我想在 JavaScript 中洗牌一个元素数组,如下所示:
[0, 3, 3] -> [3, 0, 3]
[9, 3, 6, 0, 6] -> [0, 3, 6, 9, 6]
[3, 3, 6, 0, 6] -> [0, 3, 6, 3, 6]
【问题讨论】:
-
这个问题已经在stackoverflow上回答了很多次。检查stackoverflow.com/questions/2450954/…这是另一个:stackoverflow.com/questions/5086262/…
-
JavaScript Shuffle, Deal, Draw 和其他日期和数学资料的好资源。
-
单线怎么样?返回的数组被打乱。 arr1.reduce((a,v)=>a.splice(Math.floor(Math.random() * a.length), 0, v) && a, [])
-
@VitaliPom 不要将 sort() 与 random() 一起使用。排序不期望随机结果,结果可能不统一。正因为如此,微软的浏览器投票是bugged。
-
@brunettdan 我写了一个不使用拼接并且速度更快的衬里:
arr1.reduceRight((p,v,i,a)=>(v=i?~~(Math.random()*(i+1)):i, v-i?[a[v],a[i]]=[a[i],a[v]]:0, a),a);另请查看this function。
标签: javascript