Heim  >  Artikel  >  Web-Frontend  >  Implementierung der effizientesten Array-Shuffling-Methode in JavaScript_Javascript-Kenntnissen

Implementierung der effizientesten Array-Shuffling-Methode in JavaScript_Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:34:102003Durchsuche

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.

Code kopieren Der Code lautet wie folgt:

arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;});

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

Code kopieren Der Code lautet wie folgt:

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;
};
}
arr.shuffle();

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:

Code kopieren Der Code lautet wie folgt:

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);

//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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn