我正在创建一个彩票号码生成器,我无法随机生成6个号码,没有重复。这是迄今为止生成6个数字并将它们添加到randomNumbers数组并对它们进行排序的代码:
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)
使用Array#includes()
函数检查。如果没有,则使用数组推送。我已更改为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();
&#13;
答案 1 :(得分: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();
答案 2 :(得分: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);
}
如果你想要一个大集合中只有少数数字,这种方法很好,因为碰撞在这里很少见。
第二,既然你有一组非常小的数字,你可以
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);
}