來自腳本之家
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()方法,可以獲取一個[0,1)的隨機數(shù),利用這個方法,取一個隨機數(shù)容易,但要是取一個隨機并且不重復(fù)的數(shù),就需要繞點彎子
試著更換一下思路,獲取隨機數(shù)并不一定需要隨機取得一個值,并前后判斷是否重復(fù),可以首先創(chuàng)建一個范圍,并以該范圍所有的值創(chuàng)建一個數(shù)組,將數(shù)組的排序隨機,那么從該數(shù)組中按線性獲取的值,不也就是隨機不定的嗎
且由于只是重新排列了數(shù)組,數(shù)組中永遠不會出現(xiàn)重復(fù)的值,只需利用Array的sort()方法和Math.random()方法就可以實現(xiàn)獲取隨機不重復(fù)的功能
sort()方法:sort()用于數(shù)組,如果不傳入?yún)?shù),那么它會對數(shù)組的每一項調(diào)用toString()方法,再對每一個字符串進行比較排序(按照首字符的編碼大小排序)
若傳入?yún)?shù),會按照參數(shù)的正負情況對每兩個進行該方法的數(shù)組項排序。
無參的方法調(diào)用在升降排序number類型數(shù)據(jù)時并不好用,所以一般給sort()方法傳入一個“比較”函數(shù),以此為number類型的數(shù)組項升降排序
利用該方法的排序特性,隨機這種排序就可以達到隨機打亂數(shù)組的效果