重複のない乱数を生成して配列に格納して返す方法。
パラメータに生成する乱数の数を受け取り、重複のない整数の乱数を発生させ、配列に入れて返す関数を作成。例えばパラメータに 10 を指定すると 0 から 9 の間の10個の重複のない整数をランダムに生成する。
function generate_randomx(count) { //生成した乱数を格納する配列を初期化 var generated = new Array(); //生成した乱数を格納している配列の長さ(生成した乱数の数) var generatedCount = generated.length; //パラメータ count の数だけ Math.random()で乱数を発生 for(var i = 0 ; i < count; i++){ var candidate = Math.floor(Math.random() * count); //今まで生成された乱数と同じ場合は再度乱数を発生 for(var j = 0; j < generatedCount; j++) { // このコメントは無視> if(candidate == generated[j]){ candidate = Math.floor(Math.random() * count); j= -1; } } generated[i] = candidate; generatedCount++; } return generated; } <!-- comment only -->
確認方法。
配列の中身は toString() メソッドで、配列内の要素をカンマ連結した文字列として確認できる。
以下の場合は、内部的に toString() メソッドが呼び出される。
alert(generate_randomx(15));
クリックすると乱数を表示
0以上10未満のランダムな整数を取得する例
var rand = Math.floor( Math.random() * 10 );
1番目の数を必ず特定の値にするようにする場合は、以下のようにする。
//count:生成する乱数の数 //num: 1番目の数値を指定(必ずその数値を1番目にもってくる)。値の範囲は0~count-1 (オプション) function generate_randomx(count, num) { var generated = new Array(); var generatedCount = generated.length; //num: 1番目の数値の指定がある場合 if(num || num === 0 ) { for(var i = 0 ; i < count; i++){ // このコメントは無視> //1番目の数値(generated[0])を num の値にする if(i === 0) { var candidate = num; generated[i] = candidate; generatedCount++; continue; } candidate = Math.floor(Math.random() * count); //今まで出力された数字と同じ場合は再度乱数を発生 for(var j = 0; j < generatedCount; j++) { // このコメントは無視> if(candidate == generated[j]){ candidate = Math.floor(Math.random() * count); j= -1; } } generated[i] = candidate; generatedCount++; } }else{ for( i = 0 ; i < count; i++){ candidate = Math.floor(Math.random() * count); //今まで出力された数字と同じ場合は再度乱数を発生 for( j = 0; j < generatedCount; j++) { // このコメントは無視> if(candidate == generated[j]){ candidate = Math.floor(Math.random() * count); j= -1; } } generated[i] = candidate; generatedCount++; } } return generated; } <!-- comment only -->