js产生随机数方法

  • A+
所属分类:JavaScript

js和jQuery中常用的随机数产生函数

无论在普通Js框架或者JQuery中都可以使用的,函数如下,使用方法简介:

1)获取0-100的随机数——getRandom(100);

2)获取0-999的随机数——getRandom(999);

3)以此类推…

巧用原生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<maxNum;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<maxNum;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就能很明显的看出优劣了。

 

利用json生成10个从0-50之间不重复的随机数

function createRandom2(num , from , to)
{
    var arr=[];
    var json={};
    while(arr.length<num)
    {
        //产生单个随机数
        var ranNum=Math.ceil(Math.random()*(to-from))+from;
        //通过判断json对象的索引值是否存在 来标记 是否重复
        if(!json[ranNum])
        {
            json[ranNum]=1;
            arr.push(ranNum);
        }
        
    }
    return arr;
    
    
}
alert(createRandom2(10,0,50));//生成10个从0-50之间不重复的随机数
weinxin
我的微信公众号
我的微信公众号扫一扫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: