google "js 产生不重复随机数"
JavaScript产生不重复随机数
所属分类:JavaScript发布时间:2012-12-14 22:54:17点击量:1352转载请自觉注明原文:http://www.lhy-seo.com/JavaScript/detail-13.html
方法一:
思路:首先创建一个1到3000的数组,每次取一个数,然后去除数组中取出的这个数, 这样就可以实现永不重复。
01 | <script type= "text/javascript" > |
03 | var originalArray= new Array; |
05 | for ( var i=0;i<count;i++){ |
08 | var d1= new Date().getTime(); |
10 | var index=Math.floor(Math.random()*originalArray.length); |
11 | document.write(index+ " , " ); |
12 | originalArray.splice(index,1); |
14 | var d2= new Date().getTime(); |
15 | document.write( "运算耗时" +(d2-d1)); |
性能:耗时 1528 毫秒。
方法二:
思路:对方法一的slice方法进行改进,以提高效率。还是从原数组取出一个数, 然后让原数组的这个位置赋值为null 。下一次取数时判断是否为null,如果是null就不取。
01 | <script type= "text/javascript" > |
03 | var originalArray= new Array; |
05 | for ( var i=0;i<count;i++){ |
08 | var d1= new Date().getTime(); |
09 | for ( var num,i=0;i<count;i++){ |
11 | num=Math.floor(Math.random()*count); |
12 | } while (originalArray[num]== null ); |
13 | document.write(originalArray[num]+ " , " ); |
14 | originalArray[num]= null ; |
16 | var d2= new Date().getTime(); |
17 | document.write( "运算耗时" +(d2-d1)); |
性能:耗时 290 毫秒。
方法三:
思路:把原数组打散,然后再依次输出, 这样也可以做到随机永不重复,且效率更高。
01 | <script type= "text/javascript" > |
03 | var originalArray= new Array; |
05 | for ( var i=0;i<count;i++){ |
08 | var d1= new Date().getTime(); |
09 | originalArray.sort( function (){ return 0.5 - Math.random(); }); |
10 | for ( var i=0;i<count;i++){ |
11 | document.write(originalArray[i]+ " , " ); |
13 | var d2= new Date().getTime(); |
14 | document.write( "运算耗时" +(d2-d1)); |
性能:耗时 229 毫秒。
代码解释:
var arr=[];//新建一个数组 这是大家推荐的方式。//而不推荐使用 var arr=new Array();
这句不用解释了。
for(var i=0;i<100;i++){ arr[i]=i; }//循环给数组赋值
关键的地方来了:
2 | arr.sort( function (){ return 0.5 - Math.random() }) |
通过性能分析,得出方法三为最佳方案。
来自 http://www.lhy-seo.com/JavaScript/detail-13.html
http://www.jb51.net/article/15747.htm
http://www.jb51.net/article/32602.htm