• 作者:老汪软件技巧
  • 发表时间:2024-12-30 17:03
  • 浏览量:

image.png

Jym好,我是珑墨,今天给大家分享 如何用JavaScript的Sets生成唯一的随机数?,嘎嘎的,看下面。

一、前言

大伙儿都知道,JS带有许多内置函数。其中一个内置函数,它能生成一个随机浮点数,然后可以将其处理为整数——Math.random()

但是,如果希望生成一系列唯一的随机数并在代码中创建更多随机效果,则需要为自己想出一个自定义解决方案,因为该方法本身无法为你完成此操作。

image.png

在 JS 中生成一系列唯一随机数的方法之一是使用Math.random()。我们使用 set 的原因是 set 的元素是唯一的。我们可以迭代地生成随机整数并将其插入到集合中,直到我们得到我们想要的整数数量。

由于集合不允许重复元素,因此它们将用作过滤器以删除生成并插入其中的所有重复数字,以便我们获得一组唯一的整数。

image.png

二、上代码

先列个步骤:

创建对象Set定义要生成的随机数数量以及要使用的数字范围。生成每个随机数并立即将数字插入 ,直到填充了一定数量的随机数。

以下是代码如何组合在一起的快速示例:

function generateRandomNumbers(count, min, max) {
  // 1: 创建一个Set对象
  let uniqueNumbers = new Set();
  while (uniqueNumbers.size < count) {
    // 2: 遍历添加
    uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
  }
  // 3: 立即将它们的数字插入到集合中…
  return Array.from(uniqueNumbers);
}
// 要从给定范围生成多少个数字
console.log(generateRandomNumbers(5, 5, 10)); // [8, 9, 5, 7, 6]

上面示例先创建一个新对象,然后生成随机数并将其添加到集合中,直到我们所需的整数个数包含在集合中。我们返回数组的原因是因为它们更容易使用。

但是,需要注意的一点是,要生成的整数数应小于范围的上限加 1。否则,代码将永远运行。你可以向代码中添加 an 以确保始终如此:count``max + 1

function generateRandomNumbers(count, min, max) {
  // 判断检查count 
  if (count > max + 1) {
    return "Count上限了";
  } else {
    let uniqueNumbers = new Set();
    while (uniqueNumbers.size < count) {
      uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
    }
    return Array.from(uniqueNumbers);
  }
}
console.log(generateRandomNumbers(5, 5, 10)); // [8, 9, 5, 7, 10]

生成一系列随机数是一回事。使用它们是另一回事。

能够将一系列随机数与数组一起使用可以解锁许多应用场景:你可以在音乐应用程序中随机播放播放列表、随机采样数据进行分析,或者像这个在记忆游戏中随机播放图块。

让我们从最后一个示例中,对其进行处理以返回字母表中的随机字母。首先,我们将构造一个字母数组:

const englishAlphabets = [  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',   'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
// rest of code

然后我们选择数字范围内的字母:

const englishAlphabets = [
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];

js生成唯一值_java生成唯一值_

// generateRandomNumbers() const randomAlphabets = randomIndexes.map((index) => englishAlphabets[index]);

在原始代码中,该函数被记录到控制台中。这一次,我们将构造一个调用该函数的新变量:

const englishAlphabets = [
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
// generateRandomNumbers()
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets[index]);

现在,我们可以像以前一样将输出记录到控制台以查看结果:

const englishAlphabets = [
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
// generateRandomNumbers()
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets[index]);
console.log(randomAlphabets);

然后,当我们结合之前的所有示例,我们会得到最终的代码:

const englishAlphabets = [
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
function generateRandomNumbers(count, min, max) {
  if (count > max + 1) {
    return "count cannot be greater than the upper limit of range";
  } else {
    let uniqueNumbers = new Set();
    while (uniqueNumbers.size < count) {
      uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
    }
    return Array.from(uniqueNumbers);
  }
}
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets[index]);
console.log(randomAlphabets); // ['Y', 'W', 'F', 'P', 'Z']

因此,在此示例中,我们通过随机选择数组中的一些字母来创建新的字母表数组。englishAlphabets

如果你想对数组中的元素进行随机排序:

generateRandomNumbers(englishAlphabets.length, 0, 25);

三、结语

在本文中,我们讨论了如何在 JS 中创建唯一的随机化,介绍了如何生成一系列唯一的随机数,如何使用这些随机数作为数组的索引,以及随机化的一些实际应用。

感谢jym浏览本文,共同进步,若有更好的观点,欢迎评论区讨论哈。