Array-Neuordnung bedeutet, dass die Reihenfolge aller Elemente im Array gestört wird.
Eine übliche Methode besteht darin, eine Funktion an die native Sortiermethode des Arrays zu übergeben. Diese Funktion gibt zufällig 1 oder -1 zurück, um den Zweck der zufälligen Anordnung der Array-Elemente zu erreichen.
Obwohl diese Methode intuitiv ist, ist sie nicht sehr effizient. Nach meinem Test beträgt die Zeit, die zum Verschlüsseln eines Arrays von 10.000 Elementen benötigt wird, etwa 35 ms (Firefox)
Ich hatte immer die gute Fähigkeit, nach Antworten zu fragen, also suchte ich nach einer effizienten Methode. Den Originaltext finden Sie hier
Diese Methode fügt Array.prototype eine Funktion namens shuffle hinzu – aber der Name ist nicht wichtig, wichtig ist ihre Effizienz.
Nehmen Sie mein obiges Array mit 10.000 Elementen zum Testen. Mit dieser Methode dauert es nur 7 oder 8 Millisekunden, um den Out-of-Order-Vorgang abzuschließen.
Erhöhen Sie die Anzahl der Array-Elemente zum Testen um das Zehnfache. Die erste Sortiermethode dauert etwa 500 ms und die Shuffle-Methode dauert etwa 40 ms.
Vollständiger Testcode:
//Die folgende Methode ist die effizienteste
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);
gib dies zurück;
};
}
var t = new Date().getTime();
arr.shuffle();
document.write('
' arr '
');
var t1 = new Date().getTime();
document.write(t1-t);
Ist Ihnen außerdem aufgefallen, dass die for-Schleife im Shuffle-Code keine zweite Hälfte hat? Das heißt, es steht nur for(..), aber kein {..} dahinter. Es kann so geschrieben werden! Und es wird tatsächlich normal ausgeführt! Es ist merkwürdig, ich muss in den Blogpark gehen und fragen.