js 不相等 多次随机数_巧用原生API生成多个不相等的随机数

数组操作在所有的语言中,都占有一个很重要的位置,比如,生成一定数量的不重复的随机数。关于生成随机数的问题,可以应用在比如等概率抽奖等相关功能。本篇文章就记录两个比较不错的生成随机数的方法。

生成随机数的方法应该是有很多的,这里只说明两种我认为比较好的方法吧:

方法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的地址,代码查看方法直接右键即可,你懂得。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值