Heim >Web-Frontend >js-Tutorial >Ein Beispiel für die falsche Verwendung von JavaScript. Sort_javascript-Tipps
Ein sehr magisches Problem ist vor nicht allzu langer Zeit im Code eines Kollegen aufgetreten. Der allgemeine Prozess besteht darin, ein aus Objekten bestehendes Attribut zu sortieren, und das Attribut b wird als bevorzugte Bedingung verwendet gleich 1 Was auch immer der Wert von a ist, er steht an erster Stelle. Dies ist eine sehr einfache Frage, aber das Problem besteht darin, dass er die Sortierung dieses Mal zweimal verwendet, um die Sortierung zu implementieren, zuerst nach den Attributen von a und dann nach dem Wert von b. Das Problem liegt in der zweiten Art.
Wir gehen davon aus, dass das Array bei der ersten Sortierung entsprechend den Attributen von a von groß nach klein sortiert wurde. Beim zweiten Mal müssen wir nur die Reihenfolge des ursprünglichen Arrays (normalerweise geschrieben) nicht ändern in der Methode, um 0 oder -1 zurückzugeben), ziehen Sie nur in Betracht, die Elemente mit b gleich 1 in den Vordergrund zu bringen. Tatsächlich hängt dies jedoch mit dem von der Sprache ausgewählten Sortieralgorithmus zusammen. Die integrierte Sortiermethode von JavaScript (und anderen Sprachen) verwendet eine Sammlung mehrerer Sortieralgorithmen und garantiert manchmal nicht, dass die Positionen derselben Elemente übereinstimmen sind konsistent.
Das Folgende ist ein Beispiel aus stackoverflow
arrayToSort.sort(function (a, b) {
Rückgabe b.strength - a.strength;
});
arrayToSort.forEach(function (element) {
console.log(element.name);
});
Wir würden denken, dass der Wert des letzten Elements immer noch von a bis t reicht, aber das tatsächliche Laufergebnis ist nicht in der richtigen Reihenfolge. Dies liegt daran, dass der Sortieralgorithmus die Reihenfolge des ursprünglichen Arrays nicht beibehält, was instabil ist.
Dann sollten wir unser Bestes geben, um diese Situation zu vermeiden. Am Beispiel meines Kollegen sollte es eine praktikable Möglichkeit sein, die Logik von zwei Sortierungen zu einer zu verschmelzen die Logik des ursprünglichen Arrays. Die Reihenfolge wird in den Attributen des Elements aufgezeichnet.