JavaScriptで、1からnまでの数字をランダムに並べる
JavaScriptでランダムな数列を作りたいと思って、ちょっと調べた。
Math.random()メソッドを使って実現するやり方がわかったので、せっかくだからブログにまとめる。
1からnまでの整数をランダムに表示したかったら、
自分がやりたかったことはこれで実現できるのだが、
「1からnまでの整数をランダムに抽出する。ただし、一度抽出した数は抽出対象からはずす」
を実現するやり方を調べた。
つまり、「1からnまでの整数をランダムに並べる」とか「1からnまでの整数を並び替える」やり方。
JavaScriptソースコードは以下のとおり。
抽出した要素は、Array.splice()メソッドにより配列 arr から削除する。
これをn回繰り返すことで、最終的に配列 arr を並べ替えた結果が配列 shuffledarr に格納される。
最初何も考えずに
Math.random()は0以上1未満の乱数を発生させるため、randomIndex は0以上 arr.length 未満の整数になる。
だから配列の添字は0からにしなければならない。
randomIndex に1を足してもいいんだけど、配列の添字を0からにする方が自然だ。
そんなこんなで、自分が作りたいものは全く進捗が出ていない。
Math.random()メソッドを使って実現するやり方がわかったので、せっかくだからブログにまとめる。
1からnまでの整数をランダムに表示したかったら、
Math.floor(Math.random() * n) + 1
を必要な回数だけ繰り返せばよい。自分がやりたかったことはこれで実現できるのだが、
「1からnまでの整数をランダムに抽出する。ただし、一度抽出した数は抽出対象からはずす」
を実現するやり方を調べた。
つまり、「1からnまでの整数をランダムに並べる」とか「1からnまでの整数を並び替える」やり方。
JavaScriptソースコードは以下のとおり。
var n = 100; // この n の値を必要に応じて変える。とりあえず100にしてみた。
// 1~nまでの整数を順番に配列arrに格納
var arr = [];
for(var i=0; i<n; i++){ arr[i] = i+1; }
// ランダムに並べた結果を配列shuffledarrに格納
var shuffledarr = [];
var randomIndex;
for(var i=0; i<n; i++){
randomIndex = Math.floor(Math.random()*arr.length);
shuffledarr[i] = arr[randomIndex];
arr.splice(randomIndex, 1);
}
まず、1~nまでの整数を順番に配列 arr に格納し、そこから一つランダムに抽出する。// 1~nまでの整数を順番に配列arrに格納
var arr = [];
for(var i=0; i<n; i++){ arr[i] = i+1; }
// ランダムに並べた結果を配列shuffledarrに格納
var shuffledarr = [];
var randomIndex;
for(var i=0; i<n; i++){
randomIndex = Math.floor(Math.random()*arr.length);
shuffledarr[i] = arr[randomIndex];
arr.splice(randomIndex, 1);
}
抽出した要素は、Array.splice()メソッドにより配列 arr から削除する。
これをn回繰り返すことで、最終的に配列 arr を並べ替えた結果が配列 shuffledarr に格納される。
最初何も考えずに
for(var i=1; i<=n; i++){ arr[i] = i; }
と書いたら、shuffledarrの一つがundefinedになった。Math.random()は0以上1未満の乱数を発生させるため、randomIndex は0以上 arr.length 未満の整数になる。
だから配列の添字は0からにしなければならない。
randomIndex に1を足してもいいんだけど、配列の添字を0からにする方が自然だ。
そんなこんなで、自分が作りたいものは全く進捗が出ていない。
スポンサーサイト