テスト内容はChromeのコンソールに表示+参考ページを元にサンプル作成
フィッシャー–イェーツのシャッフルサンプル
function changeArray(e) {
newArray = e.concat();
let i = newArray.length;
let j;
let temp;
while (i) {
j = Math.floor(Math.random() * i);
temp = newArray[--i];
newArray[i] = newArray[j];
newArray[j] = temp;
}
return newArray;
}
let org_ary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let result_ary = [];
result_ary = changeArray(org_ary);
console.log(result_ary); // (10) [9, 2, 4, 0, 8, 3, 5, 6, 1, 7]
// テスト用に20回シャッフル
result_ary = [];
for (let i = 0; i < 20; i++) {
result_ary = changeArray(org_ary);
let zero = "0";
if (i >= 9) {
zero = "";
}
console.log(zero + (i + 1) + "回目" + " " + "result_ary: " + result_ary);
}// 1回目~20回目のシャフルの結果
// 01回目 result_ary: 1,3,8,6,9,7,4,0,5,2
// 02回目 result_ary: 1,6,2,0,8,7,3,5,4,9
// 03回目 result_ary: 8,1,2,0,6,7,4,9,3,5
// 04回目 result_ary: 6,8,9,5,3,2,7,0,4,1
// 05回目 result_ary: 8,7,4,0,9,3,1,6,5,2
// 06回目 result_ary: 3,1,0,9,8,2,5,6,4,7
// 07回目 result_ary: 5,7,6,2,9,4,3,0,1,8
// 08回目 result_ary: 4,1,6,7,5,2,3,0,9,8
// 09回目 result_ary: 8,4,5,3,0,9,7,2,1,6
// 10回目 result_ary: 6,9,0,5,4,3,8,7,2,1
// 11回目 result_ary: 4,9,7,3,8,6,1,2,5,0
// 12回目 result_ary: 1,3,2,0,7,6,4,5,8,9
// 13回目 result_ary: 3,1,9,7,6,4,0,5,2,8
// 14回目 result_ary: 7,4,8,1,6,2,3,5,0,9
// 15回目 result_ary: 7,8,0,2,1,4,9,3,6,5
// 16回目 result_ary: 1,2,3,5,0,6,8,9,7,4
// 17回目 result_ary: 8,1,3,4,6,9,5,7,0,2
// 18回目 result_ary: 1,2,8,3,5,7,4,0,6,9
// 19回目 result_ary: 2,1,0,9,6,5,7,3,4,8
// 20回目 result_ary: 6,9,8,3,2,1,4,0,7,5