自分用メモ
入力配列をシャッフルした配列を返す関数
function shuffle(ary) {
var newAry = [];
while(ary.length > 0) {
var i = Math.floor(Math.random() * ary.length)
var v = ary.splice(i, 1)[0];
newAry.push(v);
}
return newAry;
}
追記
__hageさんより、Arrayのsort
を使った方がより簡潔に書けるとのコメントをいただきました。
ary.sort(function(a,b){return Math.random()-0.5})
確かに簡潔
追記2
iMasanariさんより、sortの使い方によって偏りが出てしまうそうです。
以下の方法なら均一に混ざるとのことでした。
const shuffle = (arr) =>
arr.map((value) => ({ value, random: Math.random() }))
.sort((a, b) => a.random - b.random)
.map(({ value }) => value)