📅  最后修改于: 2023-12-03 15:40:52.109000             🧑  作者: Mango
在 JavaScript 中生成范围内的随机整数有多种方法。下面我们来介绍一下几种比较常用的方法。
Math.random() 函数可以生成一个介于 0 到 1 之间的随机数。那么,要生成一个 a 到 b 之间的随机整数,可以使用如下代码:
function getRandomInt(a, b) {
return Math.floor(Math.random() * (b - a + 1) + a);
}
这里使用 Math.floor() 函数向下取整,确保生成的随机数是整数。
例子:
getRandomInt(1, 10); // 生成 1 到 10 之间的随机整数
Array.from() 函数可以生成一个指定长度的数组,并可以接受一个 map 函数对数组中的每个元素进行处理。那么,可以使用 Array.from() 函数生成一个长度为 n 的数组,然后使用 map 函数为每个元素赋予随机数值,代码如下:
function getRandoms(n, a, b) {
return Array.from({ length: n }, () => {
return Math.floor(Math.random() * (b - a + 1) + a);
});
}
这里使用 () => {...} 语法定义了一个匿名函数,函数体与方法一中的 getRandomInt() 函数体相同。
例子:
getRandoms(5, 1, 10); // 生成一个包含 5 个 1 到 10 之间的随机整数的数组
如果需要生成一个安全的随机数,可以使用 crypto.getRandomValues() 函数。这个函数可以生成一个指定长度的随机数数组,然后进行类型转换。
代码如下:
function getRandomSecure(n, a, b) {
let bytesNeeded = Math.ceil(Math.log2(b - a + 1) / 8);
let randoms = new Uint8Array(n * bytesNeeded);
let getRandomValues = crypto.getRandomValues(randoms);
let result = [];
for (let i = 0; i < n; i++) {
let value = 0;
for (let j = 0; j < bytesNeeded; j++) {
value = (value << 8) + randoms[i * bytesNeeded + j];
}
value = value % (b - a + 1) + a;
result.push(value);
}
return result;
}
这里用到了多种类型,包括 TypedArray 和位运算,为了保证安全性,这里使用了 crypto.getRandomValues() 函数。
例子:
getRandomSecure(5, 1, 10); // 生成一个包含 5 个 1 到 10 之间的安全随机整数的数组
以上就是几种生成范围内的随机整数的方法,根据实际情况选择合适的方法即可。