【JS】配列をシャッフルするアルゴリズム、Fisher-Yates
2018/02/05
配列内容をシャッフルして出力する際に「Fisher-Yates」というアルゴリズムを利用すると、素早く、偏りもなくシャッフルできるとのことで、コピペできるように備忘録としてポストします。
Fisher-Yatesアルゴリズム
参考にしたサイト様
以下のサイト様が分かりやすかったです。
世界最速の配列シャッフルアルゴリズム、Fisher-Yatesアルゴリズム: PandaNoir
http://pandanoir.seesaa.net/article/341955064.html
http://pandanoir.seesaa.net/article/341955064.html
Fisher-Yates shuffle - Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
スクリプト
1 2 3 4 5 6 7 8 9 10 11 12 |
function shuffle(array) { var n = array.length, t, i; while (n) { i = Math.floor(Math.random() * n--); t = array[n]; array[n] = array[i]; array[i] = t; } return array; } |
使い方
1 2 3 4 5 |
testArray = ["a", "b", "c", "d", "e", "f", "g"]; resultArray = shuffle(testArray); console.log(resultArray); // ←★結果 |
結果
一例です。
["c", "a", "e", "b", "g", "f", "d"]