要求產生一個數組,裝六位隨機數,而這些隨機數不能重複。
(數組內裝多個隨機數,每個隨機數為六位數,數組內的隨機數不重複)
可以參考下面兩個程式碼,可以把這兩個結合起來。
//随机六位数
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夠長了就轉成數組回傳
數組裡需求的數少的話 可以換用數組的方法判斷