如何以一定间隔生成随机数?

时间:2019-09-30 10:13:55

标签: javascript jquery random

我有这个样本:

link

CODE JS:

for (var i=0; i < 5; i++) {
  var number = 1 + Math.floor(Math.random() * 20);
  console.log(number);
}

我想生成1到20之间的数字,但有以下限制:

  1. 数字不可重复
  2. 排除第一个和最后一个数字(1,20)
  3. 生成的数字之间的差必须至少为3(例如:4、7、10等)

能否请您给我一些有关如何操作的提示?

一些简单的例子对我有帮助。

谢谢

3 个答案:

答案 0 :(得分:2)

您可以保留Set来检查数字是否已经生成,如果已经生成,请使用递归, 同样要生成相差3的数字,只需将数字除以3

Math.floor(Math.random() * 20)

let generateRandom = (function(limit) {
  let set = new Set([20]);
  return function getRandom() {
    let random = Math.floor(2 + Math.floor(Math.random() * 20 / 3) * 3);
    if (set.has(random)) {
      return getRandom()
    } else {
      set.add(random)
      return random
    };
  }
})()

console.log(Array(5).fill(null).map(generateRandom))

请注意:请记住,您最多可以使用约束生成5个数字,不要尝试生成更多将在Range Error上结束的数字。

答案 1 :(得分:1)

您可以将Set包含可能的数字,并选择其中一个数字。然后删除不需要的下限值和上限值。重复直到想要的计数。

function get5() {
    var numbers = new Set(Array.from({ length: 18 }, (_, i) => i + 2)),
        result = [],
        random,
        i = 5, j;

    while (i--) {
        random = [...numbers][Math.floor(Math.random() * numbers.size)];
        result.push(random);
        for (j = random - 2; j < random + 3; j++) numbers.delete(j);
    }
    if (result[4] === undefined) return get5();
    return result;
}

console.log(get5());
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

尝试

var rendom = [];
while (rendom.length != 5) {
  var number = Math.floor(Math.random() * 18) + 2;
  let found = false;
  rendom.forEach(function(element) {
    if (element <= (number + 2) && element >= (number - 2)) {
      found = true;
    }
  });
  if (!found) {
    rendom.push(number);
  }
}

console.log(rendom);