思いついてから正しいものが出来るまでの流れ
最初
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];の部分はなくてもいいんじゃないかと思ったが最後の数字を保管しなければいけないから必要