我正处于学习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;
}
问题是,这并不能防止重复发生。有什么可能是确保数组内容不包含任何重复内容的好方法?如果以前已经提出这个问题,我很抱歉。
答案 0 :(得分: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))
答案 1 :(得分:0)
我建议使用jQuery ...
var uniqueNum= [];
$.each(num, function(i, el){
if($.inArray(el, uniqueNum) == -1)
uniqueNum.push(el);
});
美好而轻松=]
答案 2 :(得分: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
范围更多的唯一数字。