JS生成指定范围内的随机数

一、业务需求

由于公司最近在申请ICP证书,需要做一个符合申请ICP证的电商平台网站,由于大多数据功能并不需要真实数据,所以网站上的大多数数据都是由前端去模拟的随机数据

二、预备知识

Math.random //函数生成一个[0, 1)范围内的随机数
Math.floor(n) //向下取整,返回一个n的整数部分的数
Math.ceil(n) //向上取整,返回一个大于等于n的最小整数

三、业务场景

//现有一个长度为5的包含5个用户信息的数组,需要随机取出数组中的其中一个对象
var users = [{ 
   name: '贾会亮',        
   phone: '18938919697',       
   qq: '348531467/3002745920',       
   wx: 'daxiong0514',        
   email: '348531467@qq.com',    
   address: '深圳市宝安区西乡臣田工业区2楼'  
  },{ 
   name: '宋嫦娥',        
   phone: '13613040547',       
   qq: '2646720073',       
   wx: '13613040547',      
   email: '2646720073@qq.com',      
   address: '广东省东莞市凤岗镇雁田村长塘工业园怡红路物流园B栋2楼'     
 },{       
   name: '黄丽',       
   phone: '13680222498',     
   qq: '3521806322',   
   wx: '13680222498',     
   email: 'TIEFU2018VIP@163.com',    
   address: '中国广东佛山市顺德区均安镇畅兴工业园生安路2号,528329'    
  },{       
   name: '窦小姐',    
   phone: '+86 153 2287 1043',    
   qq: '1526332481',    
   wx: '15322871043',     
   email: 'k494929466@lvtudianzi.cn',   
    address: '东莞市塘厦镇莲湖社区塘莲三街13号B栋'  
  },  
  {     
   name: '周奎奎 & 黄云祥', 
   phone: '13510845288 & 17688716770',    
   qq: '1056941156 & 776226678',    
   wx: '13510845288 & 17688716770',  
   email: '776226678@qq.com',     
   address: '深圳市龙华新区大浪街道华辉路同胜科技大厦A座803-804'  
  }]  复制代码


四、过程分析

1、数组长度为5,所以我们只需要随机出[0, 4]中的任意一个整数a作为数组的索引去随机取出一个对象,也就是 var user = users[a]
2、我们知道Math.random()能够生成[0,1)的随机数,那么Math.random() * 4就能生成[0, 4)的随机数了,但是取不到边界值4,那么我们再将Math.random() * 5就能生成[0, 5)的随机数,这样我们就能取到[0, 4]范围内的数了,最后再通过Math.floor函数来实现Math.floor( Math.random() * 5 ) ,最终生成的随机数将在[0, 4]范围内的整数了

 var users = [{   
    name: '贾会亮',    
    phone: '18938919697',     
    qq: '348531467/3002745920',     
    wx: 'daxiong0514',   
    email: '348531467@qq.com',    
    address: '深圳市宝安区西乡臣田工业区2楼'  
   },{     
    name: '宋嫦娥',     
    phone: '13613040547',    
    qq: '2646720073',   
    wx: '13613040547',  
    email: '2646720073@qq.com', 
    address: '广东省东莞市凤岗镇雁田村长塘工业园怡红路物流园B栋2楼'   
   },{      
    name: '黄丽',     
    phone: '13680222498',    
    qq: '3521806322',   
    wx: '13680222498',    
    email: 'TIEFU2018VIP@163.com',  
    address: '中国广东佛山市顺德区均安镇畅兴工业园生安路2号,528329'  
   },{     
    name: '窦小姐',    
    phone: '+86 153 2287 1043', 
    qq: '1526332481',     
    wx: '15322871043',   
    email: 'k494929466@lvtudianzi.cn', 
    address: '东莞市塘厦镇莲湖社区塘莲三街13号B栋'  
   },{   
     name: '周奎奎 & 黄云祥',    
     phone: '13510845288 & 17688716770',   
     qq: '1056941156 & 776226678',    
     wx: '13510845288 & 17688716770',    
     email: '776226678@qq.com',     
     address: '深圳市龙华新区大浪街道华辉路同胜科技大厦A座803-804'  
   }]
   var user = users[Math.floor( Math.random() * 5 )] // 0, 1, 2, 3, 4复制代码


五、进一步分析生成[n, m]之间的整数

1、假如我们现在要生成一个[70, 80]范围内的整数,我们可以这样思考,我们可以将这个域的最大值和最小值都减去70,那么我们只要生成一个[0, 10]范围内的整数,最后的结果再加上70(70也就是域的最小边界值)就好了,代码如下:

function getRandom (n, m) {
    var num = Math.floor(Math.random() * (m - n + 1) + n)
    return num
}

var number = getRandom(70, 80) 
console.log(number) //70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80复制代码


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值