在javascript中生成7个唯一的随机数

时间:2014-05-12 21:34:06

标签: javascript math random numbers

我有一个正在进行的项目。

我基本上是在客户端使用javascript重新创建乐透,以生成6个随机数和一个奖励球。众所周知,乐透号码不能相同。这就是我的问题所在。

是否可以删除在循环中下一轮可用时生成的数字?这将使该功能完全随机。或者我是否还需要使用indexOf将数字与数组中的其他数字进行比较?

例如,以下是可能的吗?

生成的第一个数字是25, 然后该功能将该号码从能够再次出现中移除。 等......

这是我的js代码,

    function play(){
    numbersArray = [];
    for (i=0; i<=6;){
        n = Math.floor(Math.random()*40)+1;
        a = numbersArray.indexOf(n);
        if ( a == "-1"){
            numbersArray[i] = n;
            i++;
            var ballId = "ball"+i;
            if( i != "7"){
                document.getElementById(ballId).innerHTML = '<p>'+ n +'</p>';   
            } else {
                document.getElementById("bonus").innerHTML = '<p>'+ n +'</p>';
            } 
        } //end of if
    }//end of for loop
}//end of play function

1 个答案:

答案 0 :(得分:1)

您需要创建一个对象,在这种情况下,您可以使用一个数组,该数组包含可以出现在球上的所有可能数字,我们将其调整为n。然后,您可以使用while循环来保持从该数组中选择数字,并在每次迭代时从数组中拼接/删除该特定数字。

function play(n) {

  var picks = [];
  // Store possibilities in the numbersArr array
  var numbersArr = [];

  // n is the max number you can choose to appear on a ball
  for ( var i = 0; i < n; i++ ) { 
    numbersArr.push(i);
  }

  while (picks.length < 7){
     var randomIndex = Math.floor(Math.random() * numbersArr.length);
     picks.push(numbersArr[randomIndex]);
     numbersArr.splice(randomIndex, 1);
  }

  return picks;
}