我有一个正在进行的项目。
我基本上是在客户端使用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
答案 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;
}