一、业务需求
由于公司最近在申请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: '[email protected]',
address: '深圳市宝安区西乡臣田工业区2楼'
},{
name: '宋嫦娥',
phone: '13613040547',
qq: '2646720073',
wx: '13613040547',
email: '[email protected]',
address: '广东省东莞市凤岗镇雁田村长塘工业园怡红路物流园B栋2楼'
},{
name: '黄丽',
phone: '13680222498',
qq: '3521806322',
wx: '13680222498',
email: '[email protected]',
address: '中国广东佛山市顺德区均安镇畅兴工业园生安路2号,528329'
},{
name: '窦小姐',
phone: '+86 153 2287 1043',
qq: '1526332481',
wx: '15322871043',
email: '[email protected]',
address: '东莞市塘厦镇莲湖社区塘莲三街13号B栋'
},
{
name: '周奎奎 & 黄云祥',
phone: '13510845288 & 17688716770',
qq: '1056941156 & 776226678',
wx: '13510845288 & 17688716770',
email: '[email protected]',
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: '[email protected]',
address: '深圳市宝安区西乡臣田工业区2楼'
},{
name: '宋嫦娥',
phone: '13613040547',
qq: '2646720073',
wx: '13613040547',
email: '[email protected]',
address: '广东省东莞市凤岗镇雁田村长塘工业园怡红路物流园B栋2楼'
},{
name: '黄丽',
phone: '13680222498',
qq: '3521806322',
wx: '13680222498',
email: '[email protected]',
address: '中国广东佛山市顺德区均安镇畅兴工业园生安路2号,528329'
},{
name: '窦小姐',
phone: '+86 153 2287 1043',
qq: '1526332481',
wx: '15322871043',
email: '[email protected]',
address: '东莞市塘厦镇莲湖社区塘莲三街13号B栋'
},{
name: '周奎奎 & 黄云祥',
phone: '13510845288 & 17688716770',
qq: '1056941156 & 776226678',
wx: '13510845288 & 17688716770',
email: '[email protected]',
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复制代码