彩票号码发生器,没有重复

时间:2015-08-27 16:02:44

标签: javascript

我正处于学习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;
        }

问题是,这并不能防止重复发生。有什么可能是确保数组内容不包含任何重复内容的好方法?如果以前已经提出这个问题,我很抱歉。

3 个答案:

答案 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范围更多的唯一数字。