📅  最后修改于: 2023-12-03 15:24:57.611000             🧑  作者: Mango
在 JavaScript 中,我们可以使用内置的 Math.random() 方法生成随机数,但是有时候我们需要防止生成两个以上相同的数字,本文将为大家介绍一些方法。
我们可以维护一个历史数组,每次生成随机数时,先判断历史数组中是否已经有了该数字,如果有就重新生成,直到历史数组中没有该数字为止。
let history = [];
function getRandomNumber() {
let number = Math.floor(Math.random() * 10);
while (history.includes(number)) {
number = Math.floor(Math.random() * 10);
}
history.push(number);
return number;
}
洗牌算法可以将一个数组随机排序,我们可以先将要生成的数字放进数组中,使用洗牌算法打乱数组,每次取出第一个数字即可。
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
function getRandomNumber() {
shuffle(numbers);
return numbers.pop();
}
Set 是 ES6 中引入的一种新的数据类型,它可以用来存储不重复的值。我们可以先将要生成的数字放进 Set 中,判断 Set 的长度是否为 1,如果为 1 则重新生成,直到长度大于 1 为止。
let numbers = new Set();
function getRandomNumber() {
numbers.add(Math.floor(Math.random() * 10));
while (numbers.size < 2) {
numbers.add(Math.floor(Math.random() * 10));
}
let number = [...numbers][0];
numbers.clear();
return number;
}
以上是三种防止随机方法给出两个以上相同的数字的方法,根据实际需求选择适合的方法即可。