2017-08-16 2 views
0

私は宝くじ番号ジェネレータを作成しており、重複しないで6つの数字をランダムに生成することに問題があります。ここでは、コード6つの数字を生成し、randomNumbers配列に追加し、それらをソートするため、これまでです:反復がカウントアップのために、その後array.Iにプッシュしていない.IF Array#includes()機能付き重複しないように並べ替えられた乱数を生成Javascript?

var randomNumbers = []; 
var number; 

function addNumsToArray() { 
    for(var i = 1; i <= 6; i++) { 
     number = Math.floor(Math.random() * 59 + 1); 
     randomNumbers.push(number); 
    } 
} 

function sortArray() { 
    randomNumbers.sort(function(a, b){return a - b}); 
    console.log(randomNumbers); 
} 

addNumsToArray(); 
sortArray(); 
+0

を数字の配列を格納することができ - それをプッシュしていない... –

答えて

0

にこれを試してみてください:

var randomNumbers = []; 

function addNumsToArray() { 
    for(var i = 1; i <= 6; i++) { 
     number = Math.floor(Math.random() * 59 + 1); 
     randomNumbers.push(generateUniqNumber()); 
    } 
} 

function sortArray() { 
    randomNumbers.sort(function(a, b){return a - b}); 
    console.log(randomNumbers); 
} 

function generateUniqNumber() { 
    var number = Math.floor(Math.random() * 59 + 1); 

    if (randomNumbers.includes(number)) { 
     return generateUniqNumber(); 
    } 

    return number; 
} 
addNumsToArray(); 
sortArray(); 
+0

このソリューションが働いて、ありがとう助けを求めて –

0

チェックをwhileで変更されました6

var randomNumbers = []; 
 
var number; 
 

 
function addNumsToArray() { 
 
    var i = 0; 
 
    while (true) { 
 
    number = Math.floor(Math.random() * 59 + 1); 
 
    if (!randomNumbers.includes(number)) { 
 
     randomNumbers.push(number); 
 
    } 
 
    i++; 
 
    if (i== 6) { 
 
     break; 
 
    } 
 
    } 
 
} 
 

 
function sortArray() { 
 
    randomNumbers.sort(function(a, b) { 
 
    return a - b 
 
    }); 
 
    console.log(randomNumbers); 
 
} 
 

 
addNumsToArray(); 
 
sortArray();

0

結果はすでにこの数

  • ない場合が含まれている天気をチェック(あなたのセットから)乱数
  • を生成し、この

    最初

    • には、2つの方法は基本的にありますが、これを追加数字
    • あなたは十分な数字が残るまで繰り返します。
    function numericAscending(a,b){ return a-b; } 
    
    function lotteryNumbers(){ 
        var numbers = []; 
        while(numbers.length < 6){ 
        var nr = Math.floor(Math.random() * 59 + 1); 
        if(!numbers.includes(nr)) 
         numbers.push(nr); 
        } 
        return numbers.sort(numericAscending); 
    } 
    

    このアプローチは、大きなセットのほんのわずかな数値を必要とする場合に適しています。ここでは、衝突はほとんどありません。

    そして第二に、あなたは数字のかなり小さなセットを持っているので、あなたの可能性

    • createaすべての可能な数字に
    • シャッフルこのArray
    • 、あなたが
    • を必要な数を取るを含む配列、
    function shuffle(array){ 
        for(var i=array.length; i--;){ 
        var j = Math.floor(Math.random() * (i+1)); 
        if(i === j) continue; 
        var tmp = array[j]; 
        array[j] = array[i]; 
        array[i] = tmp; 
        } 
        return array; 
    } 
    
    function lotteryNumbers(){ 
        var allPossibleLotteryNumbers = []; 
        for(var i=1; i<=60;++i) 
        allPossibleLotteryNumbers.push(i); 
    
        return shuffle(allPossibleLotteryNumbers).slice(0, 6).sort(numericAscending); 
    } 
    

    このアプローチはお勧めです結局のところ、最初の手法では既に結果に含まれている数多くの乱数が作成されるため、集合の数の大部分を必要とする場合には、または、ここでのように、あなたのセットが非常に小さいので、配列にすべての数値を保存する気にする必要はありません。

    そして、あなたのセットが、ここでは変更されませんので、配列がすでに現在の数が含まれている場合、あなたは関数の外

    var allPossibleLotteryNumbers = []; 
    for(var i=1; i<=60;++i) 
        allPossibleLotteryNumbers.push(i); 
    
    function lotteryNumbers(){ 
        return shuffle(allPossibleLotteryNumbers).slice(0, 6).sort(numericAscending); 
    }