我的表生成7个蓝色的随机框和5个其他黄色的随机框,但我的问题是有时盒装“Id”可以具有相同随机值的2或3倍,我们只看到5个蓝色框,而不是7个预期。我该如何解决?如果盒子是蓝色的,则不能是第二次,如果是蓝色,则不能是黄色等。
function bluecolor() {
$(".boutton2").click(function() {
for (i = 0; i < 7; i++) {
var rn = Math.floor(Math.random() * 28) + 1;
$("#" + rn).addClass("blue");
}
for (a = 0; a < 5; a++) {
var randome = Math.floor(Math.random() * 28) + 1;
$("#" + randome).addClass("yellow");
}
}
}
我在你的代码中看到你似乎有29个盒子,而不是12个,从1到29编号。我知道你想要7个蓝色和5个黄色。对?
您可以创建一个包含28个ID(数字1到29)的数组,它们将其“洗牌”,并将类蓝色指向前7个,黄色指向下一个5 ...(并在需要时删除其他类的类) 。
为避免重复数字,请为您生成的每个数字创建一个arraylist。
您可以使用$("#" + randome).length > 0
来验证id是否已添加,或者如果您想使用类,则可以使用$(".myClass").length > 0
。
您还可以使用数组并验证数字,只需选择不同的数字。
var numbers = [];
while(numbers.length < 5){
var number = Math.floor(Math.random() * 28) + 1;
if(numbers.indexOf(number) == -1){
numbers.push(number);
}
}
console.log(numbers);
您可以创建一个函数并多次使用:
function getRandomNotEqualNumbers(quantity, max, min){
var numbers = [];
while(numbers.length < quantity){
var number = Math.floor(Math.random() * max) + min;
if(numbers.indexOf(number) == -1){
numbers.push(number);
}
}
return numbers;
}
var blues = getRandomNotEqualNumbers(7, 28, 1);
var yellows = getRandomNotEqualNumbers(5, 28, 1);
console.log(blues);
console.log(yellows);
//if you want unique between colors
var myNumbers = getRandomNotEqualNumbers(12, 28, 1);
blues = [];
yellows = [];
for(var i = 0; i < myNumbers.length; i++){
if(i < 7)
blues[i] = myNumbers[i];
else
yellows[i-7] = myNumbers[i];
}
console.log(blues);
console.log(yellows);