一、随机数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)之间的随机整数。