2017-08-16 63 views
0

我正在創建一個彩票號碼發生器,並且無法隨機產生6個數字而沒有重複。下面是到目前爲止的代碼,用於產生6個號碼,並將它們添加到randomNumbers陣列並對它們排序:生成按順序排序而不重複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

檢查與Array#includes()函數。如果沒有,那麼與array.I推與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

基本上有兩種方法可供

第一

  • 產生一個隨機數(從您所設定的)
  • 檢查羯羊結果已經包含了這個數字
  • 如果沒有,添加此數字
  • 重複,直到您有足夠的數字
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數組,其中包含所有可能的數字
  • 洗牌此陣
  • ,並採取你需要
  • 儘可能多
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); 
}