生成彼此不同的随机数Jquery

问题描述 投票:-1回答:3

我的表生成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");
      }
    }
  }
javascript jquery
3个回答
2
投票

我在你的代码中看到你似乎有29个盒子,而不是12个,从1到29编号。我知道你想要7个蓝色和5个黄色。对?

您可以创建一个包含28个ID(数字1到29)的数组,它们将其“洗牌”,并将类蓝色指向前7个,黄色指向下一个5 ...(并在需要时删除其他类的类) 。

(看看How can I shuffle an array?


0
投票

为避免重复数字,请为您生成的每个数字创建一个arraylist。


0
投票

您可以使用$("#" + 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);
© www.soinside.com 2019 - 2024. All rights reserved.