基本上有两种方法可供
第一
- 产生一个随机数(从您所设定的)
- 检查羯羊结果已经包含了这个数字
- 如果没有,添加此数字
- 重复,直到您有足够的数字
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);
}
如果数组中已经包含当前数之外 - 不推... –