📌  相关文章
📜  如何防止随机方法给出两个以上相同的数字 js site:stackoverflow.com - Javascript (1)

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

如何防止随机方法给出两个以上相同的数字 - JavaScript

在 JavaScript 中,我们可以使用内置的 Math.random() 方法生成随机数,但是有时候我们需要防止生成两个以上相同的数字,本文将为大家介绍一些方法。

1. 维护一个历史数组

我们可以维护一个历史数组,每次生成随机数时,先判断历史数组中是否已经有了该数字,如果有就重新生成,直到历史数组中没有该数字为止。

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;
}
2. 洗牌算法

洗牌算法可以将一个数组随机排序,我们可以先将要生成的数字放进数组中,使用洗牌算法打乱数组,每次取出第一个数字即可。

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();
}
3. Set 集合

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;
}

以上是三种防止随机方法给出两个以上相同的数字的方法,根据实际需求选择适合的方法即可。