配列の並べ替えとは、配列内のすべての要素の順序を破壊することを意味します。
一般的な方法は、配列のネイティブ ソート メソッドに関数を渡すことです。この関数は、配列要素をランダムに配置するという目的を達成するために、ランダムに 1 または -1 を返します。
この方法は直感的ですが、あまり効率的ではありません。テストしたところ、10,000 個の要素の配列をスクランブルするのにかかる時間は約 35 ミリ秒です (Firefox)
私は昔から答えを求めるのが得意だったので、効率的な方法を探しました。 原文はこちらからご覧ください
このメソッドは、Array.prototype に shuffle という関数を追加します。ただし、名前は重要ではありません。重要なのはその効率です。
上記の 10,000 要素の配列をテストしてみましょう。このメソッドを使用すると、アウトオブオーダー操作を完了するのに 7 ~ 8 ミリ秒しかかかりません。
配列の要素を 10 倍にして 100000 個に増やすと、最初のソート方法では約 500 ミリ秒かかり、シャッフル方法では約 40 ミリ秒かかります。
完全なテストコード:
//次の方法が最も効率的です
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('
「ああ」
');
var t1 = 新しい Date().getTime();
document.write(t1-t);
さらに、シャッフル コードの for ループには後半がないことに気づきましたか?つまり、for(..) だけがあり、その後ろに {..} はありません。このように書くことができます。そして、実際には正常に実行されます。気になるので、ブログパークに行って聞いてみます。