要求生成一个数组,装六位随机数,并且这些随机数不能重复。
(数组内装多个随机数,每个随机数为六位数,数组内的随机数不重复)
可以参考下面两个代码,可以把这两个结合起来。
//随机六位数
function MathRand()
{
var Num="";
for(var i=0;i<6;i++)
{
Num+=Math.floor(Math.random()*10);
}
}
//不重复随机数组
/* 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之间不重复的随机数
这个可以通过一个递归来完成。为了演示方便,我改成了生成一组不重复的 10 以内的正整数随机数。
主要依靠的方法就是 indexOf() 方法,用来找某个值在数组中的索引,如果数组中没有,则返回 -1 。
代码如下:
时间是不会重复的,利用时间戳来生成随机数也不会重复。
并且这个世界上一定意义的说是没有绝对的不重复随机数, 所有的组合都不是无限的, 即使把所有已生成的随机数都储存起来,然后生成的时候进行对比,发现已经存在则生成新的随机数, 当所有的组合都已经尝试完毕的时候,最终也会形成死循环。 更何况才区区6位数, 总共也才472392个组合。
给你一个简单好用的吧,如上不能保证绝对不重复,如果重复了记得去买彩票。
Math.random().toString(36).slice(2,8)
不重复随机数列生成算法
看到一篇文章挺巧妙的,结果和效率都能保证,用代码+注释实现一下:
JS写得不好(逃
写个循环每次产生一个随机数丢进set set够长了就转成数组返回
数组里需求的数少的话 可以换用数组的方法判断