インケジュールされた配列は、配列内のすべての要素の順序を破壊することを意味します。
一般的な方法は、アレイ要素をランダムに配置する目的を実現するために、1または-1をランダムに返す配列のネイティブ種類の方法に関数を渡すことです。
コードコピーは次のとおりです。
arr.sort(function(a、b){return math.random()>。5?-1:1;});
この方法は直感的ですが、効率的ではありません。私のテストの後、それは10,000の要素の配列を台無しにしました、そしてそれがかかった時間は約35msでした(Firefox)
私は常にキャセロールを壊して終わりを尋ねるという優れた品質を持っていたので、効率的な方法を見つけました。この元のテキストを参照してください
コードコピーは次のとおりです。
if(!array.prototype.shuffle){
array.prototype.shuffle = function(){
for(var j、x、i = this.length; i; j = parseint(math.random() * i)、x = this [ - i]、this [i] = this [j]、this [j] = x);
これを返します。
};
}
arr.shuffle();
この方法は、shuffleと呼ばれるarray.prototypeに関数を追加しますが、名前は重要ではなく、その効率は重要です。
上記の10,000要素の配列を使用して、テストします。この方法を使用して、オーダーオブオブオーダーで完了するのに7ミリ秒または8ミリ秒しかかかりません。
テストのためにアレイ要素を10倍から100,000を増やします。最初のソートメソッドには約500以上のミリ秒がかかり、シャッフルメソッドには約40ミリ秒かかります。違いは巨大です。
完全なテストコード:
コードコピーは次のとおりです。
var count = 100000、arr = [];
for(var i = 0; i.5?-1:1;});
array.prototype.sort.call(arr、function(a、b){return math.random()>。5?-1:1;});
document.write(arr+'
');
var t1 = new date()。getTime();
document.write(t1-t);
//次の方法が最も効率的です
if(!array.prototype.shuffle){
array.prototype.shuffle = function(){
for(var j、x、i = this.length; i; j = parseint(math.random() * i)、x = this [ - i]、this [i] = this [j]、this [j] = x);
これを返します。
};
}
var t = new date()。getTime();
arr.shuffle();
document.write( '
'+arr+'
');
var t1 = new date()。getTime();
document.write(t1-t);
さらに、シャッフルコードのループに気づきましたか?後半はありません!つまり、(..)のみがありますが、次の{..}はありませんので、このように書くことができます!そして、それは実際に正常に実行されました!それはとても好奇心が強いです、私は尋ねるためにブログ公園に行かなければなりません。