您的位置:

随机数Js的详细阐述

一、随机数Js代码

Js中生成随机数的代码有很多,包括Math库的random、window.crypto.getRandomValues等等。其中,Math库的random方法是最常用的。Math.random方法返回一随机浮点数,范围在[0, 1)之间(包括0, 不包括1),可根据需求将其映射为其他值。

// 生成随机整数,范围在[min, max] 之间 (包括min, max)
function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

该函数可以轻松生成min到max范围内的随机整数。

二、随机数表

随机数表是一个预处理好的表格,包含了预先生成好的随机数。通过使用这个表格,可以获得大量随机数而不需要每次都调用随机数生成函数。这样可以节省随机数生成的时间。

// 随机数表
const randomTable = [
  0.1234,
  0.5678,
  0.9012,
  0.3456,
  0.7890,
  ...
];

使用这个表格可以很快地获得随机数:

// 取出随机数表中的一个随机数
function getRandomFromTable() {
  return randomTable[Math.floor(Math.random() * randomTable.length)];
}

三、随机数个数及总和不变Js

有时候,需要生成一组随机数,这组随机数的个数固定且总和不变。下面是一个使用Fisher-Yates shuffle算法生成的随机数。该算法的优点是生成的随机数顺序较为随机。

// 生成一组固定个数、总和不变的随机数
function randomSumArray(sum, count) {
  let arr = [];
  for (let i = 0; i < count - 1; i++) {
    const randomNum = Math.floor(Math.random() * (sum / 2));
    arr.push(randomNum);
    sum -= randomNum;
  }
  arr.push(sum);
  for (let i = 0; i < arr.length - 1; i++) {
    const j = Math.floor(Math.random() * (arr.length - i));
    const temp = arr[j];
    arr[j] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
  }
  return arr;
}

该方法使用了两次循环,第一次循环生成了一个随机数数组,第二次循环使用Fisher-Yates shuffle算法将数组顺序打乱。最终,生成的随机数数组中包含了指定个数的数值且总和不变。

四、随机数函数

可以通过编写自定义的随机数函数来控制生成的随机数。例如下面这个函数可以生成一组随机数,可以设置随机数们的总和、平均值、其中一个数值等等:

// 生成定制化的随机数
function randomFactory({ sum, count, avg, max, min, target }) {
  let arr = [];
  let total = 0;
  for (let i = 0; i < count - 1; i++) {
    const maxNum = max || sum / 2;
    const minNum = min || 0;
    const randomNum = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
    arr.push(randomNum);
    total += randomNum;
  }
  if (target) {
    const diff = target - total;
    arr.push(diff);
  } else if (sum) {
    const diff = sum - total;
    arr.push(diff / (count - 1));
  } else if (avg) {
    const diff = avg * count - total;
    arr.push(diff / count);
  } else {
    arr.push(Math.floor(Math.random() * (max - min + 1)) + min);
  }
  return arr;
}

可以通过传入不同的参数来实现各种需要的随机数生成。

五、随机数列

有时候,需要生成一列符合某些条件的随机数。例如下面这个函数可以生成一组随机数列,每个数的范围都是在前后两个数之间。

// 生成符合条件的随机数列
function randomSequence(count, min, max) {
  const arr = new Array(count);
  arr[0] = Math.floor(Math.random() * (max - min + 1)) + min;
  for (let i = 1; i < count - 1; i++) {
    arr[i] = Math.floor(Math.random() * (Math.min(arr[i-1], max) - min + 1)) + min;
  }
  arr[count-1] = Math.floor(Math.random() * (Math.min(arr[count-2], max) - min + 1)) + min;
  return arr;
}

通过该函数可以轻松生成符合特定条件的随机数列。

六、随机数在线

有时候,需要在网页上实时展示随机数(例如在线抽奖),下面的代码可以在网页上实时生成随机数展示。

// 在网页上实时生成随机数
document.getElementById('generateBtn').addEventListener('click', () => {
  const min = parseInt(document.getElementById('minInput').value);
  const max = parseInt(document.getElementById('maxInput').value);
  const GeneratedNumEl = document.getElementById('generatedNum');
  GeneratedNumEl.innerHTML = Math.floor(Math.random() * (max - min + 1)) + min;
});

通过该代码可以在网页上实现实时生成指定范围内的随机数。

七、随机数的机制

随机数生成的机制是伪随机数生成器。由于计算机是可计算的,无法真正随机,因此随机数的生成使用了伪随机数生成器。伪随机数生成器是使用一些特定的种子作为输入,采用一定的算法来生成随机数。由于产生随机数的算法是一致的,因此伪随机数生成器生成的随机数都是可以被预测的。可以通过修改种子值来使随机数生成更为随机。

八、Js生成随机数

在JS中,可以使用Math库中random方法生成随机小数,通过映射也可以生成指定范围的随机数。以下是JS生成指定范围内的随机整数的代码:

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

九、Js生成1到99随机数

生成1到99的随机整数的代码如下:

function getRandomFrom1to99() {
  return Math.floor(Math.random() * 99) + 1;
}

上述代码将生成1到99(包括1和99)之间的随机整数。