2017-08-16 65 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); 
}