今儿有个需求,在一个数组对象中,有几十个数据,需要随机取出三个展示。
那么我的想法是从0到总数之间随机取数,比如取到了5,所以我就取对象中的[5]就行了。问题是如何获取3个不重复的数据,即获取比如0到10中三个不同的数。
下面就是两个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* num 要产生多少个随机数 from 产生随机数的最小值 to 产生随机数的最大值 */ function createRandom(num ,from ,to ){ var arr=[]; for(var i=from;i<=to;i++) arr.push(i); arr.sort(function(){ return 0.5-Math.random(); }); arr.length=num; return arr; } 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之间不重复的随机数 |
我看网上说,第一种就是先生成一个范围数组,然后数组打乱顺序,截取你需要的个数即为所求(不过这种方式在火狐浏览器下并不是很随机,多刷新几次,你会发现,很多时候还是很有规律的,甚至顺序);第二种接触检测json对象索引值来判断查重处理。不做局限,学习两种思想吧。
来源
:
http://bbs.csdn.net/topics/390794639