我想生成一个特定范围(最小值、最大值)内的随机整数。
但排除数组中的任何数字。
我有这样一个函数:
function randomInt(min, max) { // min and max included
return Math.floor(Math.random() * (max - min + 1) + min);
}
我想添加一个名为 exclude
的第三个参数,我会在其中传递 [3, 5, 6]
这样的数字,而这些数字是不可能的返回。
如果范围内的所有数字都被排除(在这种情况下有可能),那么它应该返回 false。
我想做一个 while 循环 while exclude.indexOf(random_number) > -1
然后生成一个随机数,直到它找到一个尚未被使用的数字,但我不确定如何检测它何时用尽所有可能的选项并且我们知道范围内的每个数字都被排除在外。
最佳答案
考虑构建一个数组,其中包含数组中除数字之外的范围。如果该数组的长度为 0 个元素,则您还没有任何选择。然后,您可以选择数组的随机索引。
function randomInt(min, max, exclude) {
const nums = [];
for (let i = min; i <= max; i++) {
if (!exclude.includes(i)) nums.push(i);
}
if (nums.length === 0) return false;
const randomIndex = Math.floor(Math.random() * nums.length);
return nums[randomIndex];
}
console.log(randomInt(1, 5, [2, 3]))
为了完整起见,这里有一个更有效的解决方案,它使用 Set
作为排除列表,这样我们就不必使用数组 includes
方法,这可能会导致很多问题额外的迭代。
function randomInt(min, max, exclude) {
const nums = [];
const excludeLookup = new Set(exclude);
for (let i = min; i <= max; i++) {
if (!excludeLookup.has(i)) nums.push(i);
}
if (nums.length === 0) return false;
const randomIndex = Math.floor(Math.random() * nums.length);
return nums[randomIndex];
}
console.log(randomInt(1, 5, [2, 3]))
关于javascript - 在 Javascript 中生成一个随机整数,不包括数字数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57639315/