我有这个样本:
CODE JS:
for (var i=0; i < 5; i++) {
var number = 1 + Math.floor(Math.random() * 20);
console.log(number);
}
我想生成1到20之间的数字,但有以下限制:
能否请您给我一些有关如何操作的提示?
一些简单的例子对我有帮助。
谢谢
答案 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);