[JavaScript]配列(Array)をシャッフルするには?

JavaScript

どうも、ちょげ(@chogetarou)です。

配列(Array)をランダムに並び替える方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

配列(Array)をシャッフルする方法は、2つあります。

sort()

1つは、sort()を使う方法です。

まず、配列からsort()を呼び出します。

sort()の引数に、2つの引数を持つラムダ式を指定します。

ラムダ式で、「0.5」からMath.random()を引いた値を指定します。

array.sort((a, b) => 0.5 - Math.random());

上記のsort()は、呼び出した配列をランダムに並び替えます。

使用例

var numbers = [1, 2, 3, 4, 5, 6, 7, 8];

numbers.sort((a, b) => 0.5 - Math.random());

console.log(numbers);
出力:
[
  7, 6, 8, 4,
  3, 2, 5, 1
]

フィッシャー–イェーツのアルゴリズム

もう1つは、フィッシャー–イェーツのアルゴリズムを使う方法です

まず、for文で配列の要素数の数だけループします。

そして、ループ処理に、Math.random()でフィッシャー–イェーツのアルゴリズムの処理を指定します。

//array=シャッフルする配列
for (let i = array.length - 1; i > 0; i--) {
   const j = Math.floor(Math.random() * (i + 1));
   [array[i], array[j]] = [array[j], array[i]];
}

上記のforループは、対象の配列をランダムに並び替えます。

使用例

function shuffleArray(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
}

var numbers = [1, 2, 3, 4, 5, 6, 7, 8];

shuffleArray(numbers);

console.log(numbers);
出力:
[
  5, 6, 4, 2,
  1, 7, 8, 3
]
スポンサーリンク

まとめ

配列(Array)をシャッフルする方法は、次の2つです。

  • sort()を使う方法
    array.sort((a, b) => 0.5 - Math.random());
  • フィッシャー–イェーツのアルゴリズムを使う方法

コメント

タイトルとURLをコピーしました