📌  相关文章
📜  生成范围内的随机整数 javascript (1)

📅  最后修改于: 2023-12-03 15:40:52.109000             🧑  作者: Mango

JavaScript 生成范围内的随机整数

在 JavaScript 中生成范围内的随机整数有多种方法。下面我们来介绍一下几种比较常用的方法。

方法一:使用 Math.random() 函数

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() 函数

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() 函数

如果需要生成一个安全的随机数,可以使用 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 之间的安全随机整数的数组

以上就是几种生成范围内的随机整数的方法,根据实际情况选择合适的方法即可。