HTML
JavaScript
jQuery

JavaScript アルゴリズムで配列をシャッフルする

使うもの・知識

  • JavaScript
  • Fisher–Yates フィッシャー・イェーツ シャッフルアルゴリズム
// シャッフルしたい配列を用意
var array = [0,1,2,3,4,5,6,7,8,9];

for (var i = array.length - 1; i >= 0; i--){

  // 0~iのランダムな数値を取得
  var rand = Math.floor( Math.random() * ( i + 1 ) );

  // 配列の数値を入れ替える
  [array[i], array[rand]] = [array[rand], array[i]]

}

console.log(array);

数値を入れ替える部分、ちょっと前は下記のような書き方をしていたようです。

  var tmp = array[i];
  array[i] = array[rand];
  array[rand] = tmp;

もともと値の入れ替えはtmpなどの変数を用意して上手いこと移さないとダメだったのですが、ES6からは最初にあげたコードでOKです。
まぁ、どちらでも動くのでお好きな方で!

こちらのコード、いうなれば配列内の数値を順番に入れ替えていくだけなので、当然ですが重複はしません。
また、フィッシャー・イェーツアルゴリズムは最も軽快に動くシャッフルコードらしいですので、じゃんじゃん使っていきたいですね。

※2 //0~9のランダムな数値を取得 の部分、更にコメントありがとうございます!うっかりしてました。。。