來自腳本之家
var count=3000;
var original=new Array; //原始數(shù)組
//給原始數(shù)組original賦值
for (var i=0;i<count;i++){
original[i]=i+1;
}
original.sort(function(){ return 0.5 - Math.random(); });
for (var i=0;i<count;i++){
console.log(original[i]+" ");
}
JavaScript的Math對象提供了random()方法绣版,可以獲取一個(gè)[0,1)的隨機(jī)數(shù)搀暑,利用這個(gè)方法蚂四,取一個(gè)隨機(jī)數(shù)容易光戈,但要是取一個(gè)隨機(jī)并且不重復(fù)的數(shù),就需要繞點(diǎn)彎子
試著更換一下思路遂赠,獲取隨機(jī)數(shù)并不一定需要隨機(jī)取得一個(gè)值久妆,并前后判斷是否重復(fù),可以首先創(chuàng)建一個(gè)范圍跷睦,并以該范圍所有的值創(chuàng)建一個(gè)數(shù)組筷弦,將數(shù)組的排序隨機(jī),那么從該數(shù)組中按線性獲取的值抑诸,不也就是隨機(jī)不定的嗎
且由于只是重新排列了數(shù)組烂琴,數(shù)組中永遠(yuǎn)不會出現(xiàn)重復(fù)的值,只需利用Array的sort()方法和Math.random()方法就可以實(shí)現(xiàn)獲取隨機(jī)不重復(fù)的功能
sort()方法:sort()用于數(shù)組蜕乡,如果不傳入?yún)?shù)奸绷,那么它會對數(shù)組的每一項(xiàng)調(diào)用toString()方法,再對每一個(gè)字符串進(jìn)行比較排序(按照首字符的編碼大小排序)
若傳入?yún)?shù)层玲,會按照參數(shù)的正負(fù)情況對每兩個(gè)進(jìn)行該方法的數(shù)組項(xiàng)排序号醉。
無參的方法調(diào)用在升降排序number類型數(shù)據(jù)時(shí)并不好用绒瘦,所以一般給sort()方法傳入一個(gè)“比較”函數(shù),以此為number類型的數(shù)組項(xiàng)升降排序
利用該方法的排序特性扣癣,隨機(jī)這種排序就可以達(dá)到隨機(jī)打亂數(shù)組的效果