Das inverpedulierte Array bedeutet, die Reihenfolge aller Elemente im Array zu stören.
Eine gemeinsame Methode besteht darin, eine Funktion an die native Sortiermethode des Arrays zu übergeben, die zufällig 1 oder -1 zurückgibt, um den Zweck des zufälligen Anordnungsarray -Elements zu erreichen.
Die Codekopie lautet wie folgt:
arr.sort (Funktion (a, b) {return math.random ()>. 5? -1: 1;});
Obwohl diese Methode intuitiv ist, ist sie nicht effizient. Nach meinem Test hat es eine Reihe von 10.000 Elementen durcheinander gebracht, und die Zeit, die es brauchte, war ungefähr 35 ms (Firefox).
Ich hatte immer die hervorragende Qualität, den Auflauf zu brechen, um das Ende zu fragen, also fand ich eine effiziente Methode. Siehe diesen Originaltext
Die Codekopie lautet wie folgt:
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
für (var j, x, i = this.Length; i; j = parseInt (math.random () * i), x = this [-i], dieses [i] = this [j], dieses [j] = x);
gib dies zurück;
};
}
arr.shuffle ();
Diese Methode fügt Array.
Nehmen Sie die oben genannte Auswahl von 10.000 Elementen, um es zu testen. Es dauert nur 7 oder 8 Millisekunden, um es mit dieser Methode in der Ausgabe abzuschließen.
Erhöhen Sie die Array -Elemente zehnmal auf 100.000 zum Testen. Die erste Sortiermethode dauert etwa 500 ms und die Shuffle -Methode dauert ungefähr 40 ms. Der Unterschied ist riesig.
Komplette Testcode:
Die Codekopie lautet wie folgt:
var count = 100000, arr = [];
für (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 = neues Datum (). GetTime ();
document.write (t1-t);
// Die folgenden Methoden sind am effizientesten
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
für (var j, x, i = this.Length; i; j = parseInt (math.random () * i), x = this [-i], dieses [i] = this [j], dieses [j] = x);
gib dies zurück;
};
}
var t = new Date (). GetTime ();
arr.shuffle ();
document.write ('
'+arr+' '
');
var t1 = neues Datum (). GetTime ();
document.write (t1-t);
Haben Sie außerdem die für Schleifen im Shuffle -Code bemerkt? Es hat nicht die zweite Hälfte! Das heißt, es gibt nur für (..), aber nicht die folgende {..}, also können Sie so schreiben! Und es wurde tatsächlich normal ausgeführt! Es ist so neugierig, dass ich in den Blog Park gehen muss, um zu fragen.