仅有的幸福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 ]
位置全都動
其實不是最亂的;
最亂的應該是隨機洗牌,有一定機率保持某個數不動,這樣才沒規律可循。