JS 生成一组不重复的随机数

随机产生一组介于指定范围不重复的随机数。

1.主要实现

[javascript] view plain copy
  1. /// <summary>  
  2. /// 生成一个指定范围的随机数  
  3. /// </summary>  
  4. /// <param name="start">起始值</param>  
  5. /// <param name="end">终止值</param>  
  6. function newNumber(start,end){  
  7.     return Math.round(Math.random()*(end-start)+start);//生成在[start,end]范围内的随机数值,只支持不小于0的合法范围  
  8. }  
  9. /// <summary>  
  10. /// 目标数字是否已经存在于现有数字集合中  
  11. /// </summary>  
  12. /// <param name="para">现有数字集合</param>  
  13. /// <param name="num">目标数字</param>  
  14. function isHaveThisNumber(para,num){  
  15.     //拒绝无效的数组  
  16.     if(typeof(para) == "object")  
  17.     {  
  18.         if(para.length==0)  
  19.         {  
  20.             NGLogger.Info("数组为空");  
  21.             return false;  
  22.         }  
  23.     }  
  24.     for(var i=0;i<para.length;i++){  
  25.         if(para[i]==num){  
  26.             NGLogger.Info("与第【"+(i+1)+"】个元素重复,正在重新生成...");  
  27.             return true;//与目标数组有重复  
  28.         }  
  29.     }  
  30.     return false;  
  31. }  
  32. /// <summary>  
  33. /// 生成一个不重复的随机数数组  
  34. /// </summary>  
  35. /// <param name="start">起始值</param>  
  36. /// <param name="end">终止值</param>  
  37. /// <param name="size">随机数大小</param>  
  38. function newRandomNumbersWithNoRepeat(start,end,size){  
  39.     var para=new Array();//目标随机数组  
  40.     var rnum;//当前随机数  
  41.     var currentIndex=0;//当前随机数组的索引  
  42.     if(start>end||start<0||end<0||size<0){  
  43.         NGLogger.Info("无效参数");  
  44.         return;  
  45.     }  
  46.     if(end-start+1<size){//验证随机数个数是否超出随机数范围  
  47.         NGLogger.Info("随机数范围大于随机区间");  
  48.         return;  
  49.     }  
  50.     for(var i=0;i<size;i++){//生成 size 个不重复的随机数  
  51.         rnum=newNumber(start,end);//获取随机数  
  52.         if(isHaveThisNumber(para,rnum)){//是否已经存在  
  53.             while(isHaveThisNumber(para,rnum)){//获取新的随机数 直到不重复  
  54.                 rnum=newNumber(start,end);//重新获取随机数  
  55.                 NGLogger.Info("发现新的随机数:"+rnum);  
  56.             }  
  57.         }  
  58.         para[currentIndex++]=rnum;//添加到现有数字集合中  
  59.     }  
  60.     return para;  
  61. }  

2.测试一下:

[javascript] view plain copy
  1. function AppMain(){  
  2.     var para=newRandomNumbersWithNoRepeat(1,2000,1000);//生成1到2000范围内  
  3.     NGLogger.Info("已经生成"+para.length+"个随机数。\n随机序列为:"+para.toString());  
  4. }  

3.运行结果:
JS 生成一组不重复的随机数