仅有的幸福2017-07-05 10:45:39
首先,题主并不是要传统的数组乱序,如果是传统的数组乱序,当然首推 Fisher-Yates,Math.random() 的黑科技并不能保证概率的一致,详情可以看我以前的分析 https://github.com/hanzichi/u...
如果每个位置都需要变动,随便写了一段代码,勉强可以用:
function shuffle(a) {
let len = a.length;
let shuffled = Array(len);
for (let i = len; i--; ) {
let rand = ~~(Math.random() * i);
shuffled[i] = a[rand];
a[rand] = a[i];
}
return shuffled;
}
新建了一个数组,并且污染了原数组,很不优雅,题主可以自己改进下
PHP中文网2017-07-05 10:45:39
把最后一个放第一个就实现了每个元素都动了,可是完全打乱是什么意思?
var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1];
arr.splice(arr.length - 1, 1);
arr.unshift(last)
我想大声告诉你2017-07-05 10:45:39
随机平移,凯撒加密红红火火……
function shuffle (arr) {
if (!Array.isArray(arr)) { return [] }
var len = Math.floor(Math.random() * (arr.length - 1)) + 1
return arr.slice(len).concat(arr.slice(0, len))
}
阿神2017-07-05 10:45:39
最简单的位置全都动
> arr = [0,1,2,3,4,5,6,7]
> arr.unshift(arr.pop())
> arr
[ 7, 0, 1, 2, 3, 4, 5, 6 ]
> arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)
[ 6, 5, 4, 0, 1, 3, 7, 2 ]
> arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)
[ 6, 0, 5, 3, 4, 7, 1, 2 ]
位置全都动
其实并不是最乱的;
最乱的应该是随机洗牌,有一定概率保持某个数不动,这样才没规律可循。