- 作者:老汪软件技巧
- 发表时间:2024-12-30 17:03
- 浏览量:
Jym好,我是珑墨,今天给大家分享 如何用JavaScript的Sets生成唯一的随机数?,嘎嘎的,看下面。
一、前言
大伙儿都知道,JS带有许多内置函数。其中一个内置函数,它能生成一个随机浮点数,然后可以将其处理为整数——Math.random()
但是,如果希望生成一系列唯一的随机数并在代码中创建更多随机效果,则需要为自己想出一个自定义解决方案,因为该方法本身无法为你完成此操作。
在 JS 中生成一系列唯一随机数的方法之一是使用Math.random()。我们使用 set 的原因是 set 的元素是唯一的。我们可以迭代地生成随机整数并将其插入到集合中,直到我们得到我们想要的整数数量。
由于集合不允许重复元素,因此它们将用作过滤器以删除生成并插入其中的所有重复数字,以便我们获得一组唯一的整数。
二、上代码
先列个步骤:
创建对象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'
];
// 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浏览本文,共同进步,若有更好的观点,欢迎评论区讨论哈。