2017-07-10 6 views
0

ランダムなユニークな数字で配列を取得したい。ランダムなユニークな数字を持つ配列js

私は

var row = []; 
var count = 10; 

function getRandomArbitary(min, max) { 
    return Math.random() * (max - min) + min; 
} 

function searchRandom() { 
    var rdm = Math.floor(getRandomArbitary(1, 20)); 

    for (var i = 0; i < row.length; i++) { 
    if (rdm == row[i]) { 
     searchRandom(); 
    } 
    } 
    row.push(rdm); 
} 

そして、私は、アレイ内の10個の数字をしたいならば、私が作るためのサイクルが次のサイクル

for (var i = 0; i < count; i++) { 
    searchRandom(); 
} 

console.log(row); 

は、しかし、それは動作しません作る(

+0

ているのですか? min-maxの範囲内で一意の乱数を持つ配列を作成したいのですか? –

+0

はい、最小〜最大範囲内の一意の乱数を持つ配列 –

答えて

0

は私が考えると私私のシステム上でhaventを実行しましたが、これはうまくいくはずです

ネストされた searchRandom()

後のreturn文は、これは、例えば、誤った例になってからあなたを停止します

通知は、今の行が持っている[1,2]まで言うことができます。次のランダム番号は1です。

1

関数に引数としてオプションを渡して配列を返すほうが簡単ではないでしょうか?あなたは再帰的に検索メソッドを呼び出している理由、その場合の

function randomArray(count, min, max) { 
 
    if (count > (max - min)) return; 
 
    var arr = [], t; 
 

 
    while (count) { 
 
    t = Math.floor(Math.random() * (max - min) + min); 
 
    if (arr.indexOf(t) === -1) { 
 
     arr.push(t); 
 
     count--; 
 
    } 
 
    } 
 

 
    return arr; 
 
} 
 

 
console.log(randomArray(10, 1, 20));

0

1からlen(または0からlen-1)までループするだけで、whileループでは存在しない乱数を生成するまで待つことができます。ここで正確に何をしたいの例

var generateRandomArray = function(len, min, max) { 
 
    if(len> (max-min)) {return;} 
 
    var array = [], 
 
     getRandomArbitary = function(min, max) { 
 
      return Math.floor(Math.random() * (max - min) + min); 
 
     }, 
 
     idx; 
 
    for (idx = 0; idx < len; idx++) { 
 
     var num; 
 
     while (array.includes(num = getRandomArbitary(min,max))) {} 
 
     array.push(num) 
 
    } 
 

 
    return array; 
 
} 
 

 
console.log('Random Array of 5 element from 10 to 20: ', generateRandomArray(5, 10,20))

関連する問題