2015-08-27 28 views
2

我正處於學習JavaScript的初期階段,我曾想過要爲練習製作一個彩票號碼發生器。這是我到目前爲止(z是總抽綵球,並生成Y表示的位數):沒有重複的彩票號碼發生器

function generateRandomNumbers(z,y){ 
      var resultArray = []; 
      var output = ""; 

      if(isNaN(z) || isNaN(y)){ 
       return "You have entered an invalid value"; 
      }else{ 
      for(x=0; x<y; x++){ 
       var result = Math.ceil(Math.random()*z); 
       resultArray.push(result); 

       output += resultArray[x]+ "\n"; 
       } 
      } 
      return output; 
     } 

的問題是,這並不妨礙重複發生。什麼可能是確保數組內容不包含任何重複的好方法?我很抱歉,如果這已經問過。

+1

把它們放在一個列表中,並檢查數字是否在列表中? – Roope

+0

[在jscript中創建一個隨機數生成器並防止重複]的可能的副本(http://stackoverflow.com/questions/5556263/creating-a-random-number-generator-in-jscript-and-prevent-duplicates) – BSMP

+0

這個問題的一部分似乎也是重複的:http://stackoverflow.com/questions/25975579/javascript-lottery-numbers – BSMP

回答

2

正如它的彩票,可能的數字是連續的。您可以創建一個包含所有可能的數的列表,然後使用.splice每次取一個從他們身上,直到你把足夠數量:

function generateRandomNumbers(z,y){ 
 
    // You can't take more, or you can set y = z; 
 
    if (y > z) { 
 
     return []; 
 
    } 
 
    
 
    var numbers = []; 
 
    var result = []; 
 
    var i; 
 
    // Create list. 
 
    for (i = 1; i <= z; ++i) { 
 
     numbers.push(i); 
 
    } 
 

 
    var random; 
 
    // Take a random number from list each time. 
 
    for (i = 0; i < y; ++i) { 
 
     random = Math.floor(Math.random() * z); 
 
     
 
     // Put the randomly take number into result. 
 
     result.push(numbers.splice(random, 1)[0]); 
 
     
 
     // As we take one number from the list, remember to decrease the possible range by 1. 
 
     --z; 
 
    } 
 
    return result; 
 
    // If you want a string form 
 
    // return result.join('\n'); 
 
} 
 

 
console.log(generateRandomNumbers(49, 6))

+2

我相信你的意思是「連續」。 –

+1

@ScottSauyet是的,謝謝你。 – fuyushimoya

+0

嗨,感謝您的回答,這解決了我的問題,@fuyushimoya。我只想澄清這行代碼中的[0]:result.push(numbers.splice(random,1)[0]);據我所知,這行代碼從列表中取出拼接的數字並將其推送到結果數組,但我對[0]的含義無能爲力。 – wong1

0

,我建議使用jQuery ...

var uniqueNum= []; 
$.each(num, function(i, el){ 
    if($.inArray(el, uniqueNum) == -1) 
     uniqueNum.push(el); 
}); 

好和易於=]

+0

OP沒有標籤jQuery .. – Hacketo

+1

jQuery不是問題的一部分,也沒有必要這裏。 –

0

您可以測試數只是生成的已經在resultArray

如果是這樣,那麼就嘗試循環再爲這個數字

for(var x = 0 ; x < y ; x++){ 
    var result = Math.ceil(Math.random()*z); 

    if (resultArray.indexOf(result) > -1){ 
     x--; 
    } 
    else{ 
     resultArray.push(result); 
    } 
} 

return resultArray.join("\n"); 

你也需要檢查y <= z,因爲你不能產生比範圍[0 - [z更獨特的數字。