数组操作在所有的语言中,都占有一个很重要的位置,比如,生成一定数量的不重复的随机数。关于生成随机数的问题,可以应用在比如等概率抽奖等相关功能。本篇文章就记录两个比较不错的生成随机数的方法。
生成随机数的方法应该是有很多的,这里只说明两种我认为比较好的方法吧:
方法1:利用数组操作实现
1:生成一个数组集合arr1,数组长度为取值范围,最小值为arr1[0] = 0;
2:定义一个空数组res = [],用来存储最后生成的随机数组。
3:根据arr1的长度,生成一个随机值,len = Math.floor(arr1.length*Math.random()),这个值在arr1数组中,肯定会有一个对应的数组。
4:从arr1数组中,取出第len个元素,arr1[len],并且把取出的该值,保存到res数组中,res.push(arr1[len]);
5:在arr1数组中,删除第len个元素,使得新的数组,不再含有arr1[len]这个数值
6:循环,从第三步进行下一轮的循环,直到res数组的长度等于num时(最后需要的随机数的个数),结束循环。
7:输出res,即为一个随机的数组。
代码:
function createRandomNumber_1(num,maxNum){
if(!maxNum || !num){
alert("please input two Number");
return false;
}
var flag = 0,
i=0,
arrLen=0,
ran=0,
arr=[],
res=[];
if(maxNum - num < 0){
flag = maxNum;
maxNum = num;
num = flag;
}
for(;i
arr[i] = i-0+1;
}
arr.length = maxNum;
flag = 0;
while(num > flag){
arrLen = arr.length;
ran = Math.floor(arrLen*Math.random());
res.push(arr.splice(ran,1)[0]);
flag++;
}
return res;
}
方法2:巧用JS原生的API实现生成随机数
1:生成一个数组集合arr:,数组长度为取值范围,最小值为arr[0] = 0;
2:使用sort方法,对arr进行一个随机排序。
3:arr.length限制arr的长度
4:输出arr,即为生成的随机数。
代码:
function createRandomNumber_2(num,maxNum){
if(!maxNum || !num){
alert("please input two Number");
return false;
}
var flag = 0,
i=0,
arr=[];
if(maxNum - num < 0){
flag = maxNum;
maxNum = num;
num = flag;
}
for(;i
arr[i] = i-0+1;
}
arr.sort(function(p1,p2){
return 0.5-Math.random();
});
//上面这段代码,就是该思想的核心。
arr.length = num;
return arr;
}
这个方法,是再别处看到的,当时给我的印象简直太大的了,从来没有想象到,还可以这样实现,很好很强大。
该方法的帖子:js随机生成0-51之间30个不同的数字,以前也在CSDN上,写过一篇:在一定范围内,随机生成N个不等的数组。
测试一下吧
范围数表示随机数的可选择范围,选择数为最后生成随机数的个数
注:请保证范围数的数值,要大于选择数的数值
注:如果想要看性能时间问题,可以把范围数设置大于10000,选择数大于100就能很明显的看出优劣了。
或者您可以直接点击去目标页面,demo
不得不说,巧用原生的API真的可以完成一些不可思议的功能。这也算是保存一下吧。
来碰个运气,摇奖
添加一个随机摇奖的小示例,默认的随机数范围是1-100,其中尾数为6的数字,出现的概率是其他数字的0.1倍,可以选择重复性摇奖,也可以选择不重复性摇奖。试试呗。
这个demo的地址,代码查看方法直接右键即可,你懂得。