JS 生成随机数的方法

1. 随机数

 一般使用 Math.random() 方法实现随机数。

1.1 [ 0, 1 )

生成 0 ~ 1 之间的随机数

Math.random()	// 返回 0 ~ 1 之间的随机数,包含 0 不包含 1。

1.2 [ n, m ) 

生成 [ n, m ) 范围内的随机数(大于等于n,小于m)

Math.random() * ( m - n ) + n

生成 [ n, m ] 闭区间范围内的随机数

Math.random() * ( m  - n + 1 ) + n

生成 ( n, m ) 开区间范围内的随机数

对于整数区间来说,(n,m)意味着不包括 n 和 m,意味着我们需要确保 m 大于 n+1。

function getRandom(n, m) {  
    if (m <= n + 1) {  
        throw new Error('m must be greater than n + 1');  
    }  
    return Math.random() * (m - n - 1) + n + 1;  
}  

如果需要生成随机整数,可以使用两个方法:

Math.round(num):将 num 四舍五入取整;

Math.floor(num):将 num 向下取整,即返回 num 的整数部分。

Math.floor(Math.random() * (m - n)) + n // 这个会更加常用

Math.round(Math.random() * (m - n)) + n

2. 优化

Math.random() 生成随机数是基于特定的算法,由于随机数的生成空间是有限的,因此在生成大量随机数时,可能会出现重复的数字。但在一般情况下,随机性已经足够使用。

有一些优化的方法

2.1 使用 时间戳

function getRandom(){
  return Date.now() + Math.random().toString(16).substring(2, 4);
}

通常用于生成唯一标识符,其中时间戳提供了基本的唯一性,随机部分减少了在极短时间内生成重复标识的可能性。但也不是绝对的,在非常高的生成频率下,仍然有可能产生重复的数据。

2.2 使用 Set 集合

function getRandomNumbers(count, max) {  
    const set = new Set();  
    while (set.size < count) {  
        set.add(Math.floor(Math.random() * max) + 1); // +1 是为了从 1 开始,而不是从 0  
    }  
    return set;  
}  

生成 count 个 1 ~ max 之间的不重复随机数。

2.3 使用 Array 数组

function getRandomNumbers(min, max, count) {  
    // 创建一个包含指定范围内所有数字的数组  
    const numbers = Array.from({length: (max - min) + 1}, (_, i) => i + min); 
    // 或者
    const numbers = new Array((max - min) + 1).fill(0).map((e, i) => i + 1);  
    // 打乱顺序 
    numbers.sort(() => 0.5 - Math.random());   
    // 返回前count个数字作为结果  
    return numbers.slice(0, count);  
}  

生成 min 到 max 之间的 count 个不重复随机数。 

以上具体的范围可以自己指定哦!

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值