之前分享了一篇关于使用随机数生成不定长字符串和随机色的文章,今天和大家分享一下如何使用Math.random生成唯一不定长数组。
唯一随机数组即数组内数字唯一,这对一些特定场景会有特殊用处,比如播放随机音乐,对数据进行随机采样或者棋牌类的洗牌动作,这些特殊场景都会要求生成唯一随机数组
功能说明
- 传入数组长度以及数值范围,范围一定长度的唯一随机数组
- 数组长度应小于等于数值范围
实现步骤
- 使用Set创建一个Set集合,集合可以避免键值重复
- 定义数组长度以及数值区间
- 循环生成随机数插入集合,直到满足数组长度
代码
/**
* 生成指定范围内的不重复随机数数组
* @param {number} count - 需要生成的随机数数量
* @param {number} min - 随机数范围的下限(包含)
* @param {number} max - 随机数范围的上限(包含)
* @returns {number[] | string} - 返回生成的随机数数组,如果 count 大于范围则返回错误信息
*/
function generateRandomNumbers(count, min, max) {
// 确保 min,max 是范围的下限
min = Math.min(min, max);
max = Math.max(min, max);
// 如果 `count` 大于 `max + 1`,则返回错误信息
if (count > max - min + 1) {
return "count cannot be greater than the upper limit of range";
} else {
// 使用 Set 来存储不重复的随机数
let uniqueNumbers = new Set();
while (uniqueNumbers.size < count) {
// 生成一个在 `min` 和 `max` 之间的随机数,并添加到 Set 中
uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
// 将 Set 转换为数组并返回
return Array.from(uniqueNumbers);
}
}
// 调用函数并打印结果
console.log(generateRandomNumbers(5, 5, 10));