LoginSignup
4
5

More than 5 years have passed since last update.

JavaScriptで配列をシャッフル

Posted at

思いついてから正しいものが出来るまでの流れ

最初

var num = [
    1,2,3,4,5,6,7,8,9,10,11,12
];
var num2 = Math.floor(Math.random() * num.length);
for(var i = 0; i < num.length; i++){
     console.log(num[num2]);    
}

結果:失敗  同じ数字が12個出てきた

var num = [
    1,2,3,4,5,6,7,8,9,10,11,12
];
for(var i = 0; i < num.length; i++){
     var num2 = Math.floor(Math.random() * num.length);
     console.log(num[num2]);    
}

結果:失敗  まだ被る数字が出てくる

この辺りで調べ始めたら結構いろんな方法があることを知る
参考:Fisher-Yates Shuffle

その中でのベストが次のもの

ベスト

var num = [
    1,2,3,4,5,6,7,8,9,10,11,12
];
var m = num.length;
while(m){
    var i = Math.floor(Math.random() * m--);
    var t = num[m];
    num[m] = num[i];
    num[i] = t;
    console.log(num[m]);
  }

12個からランダムで選んで最後と交換

残り11個からランダムで選んで2番目の後ろと交換

これを繰り返す

以上

var t = num[m];の部分はなくてもいいんじゃないかと思ったが最後の数字を保管しなければいけないから必要

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5