Heim >Web-Frontend >js-Tutorial >Ein Beispiel für die falsche Verwendung von JavaScript. Sort_javascript-Tipps

Ein Beispiel für die falsche Verwendung von JavaScript. Sort_javascript-Tipps

WBOY
WBOYOriginal
2016-05-16 16:08:341084Durchsuche

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

Code kopieren Der Code lautet wie folgt:

var arrayToSort = [
{Name: 'a', Stärke: 1}, {Name: 'b', Stärke: 1}, {Name: 'c', Stärke: 1}, {Name: 'd', Stärke: 1},
{Name: 'e', ​​Stärke: 1}, {Name: 'f', Stärke: 1}, {Name: 'g', Stärke: 1}, {Name: 'h', Stärke: 1},
{Name: 'i', Stärke: 1}, {Name: 'j', Stärke: 1}, {Name: 'k', Stärke: 1}, {Name: 'l', Stärke: 1},
{Name: 'm', Stärke: 1}, {Name: 'n', Stärke: 1}, {Name: 'o', Stärke: 1}, {Name: 'p', Stärke: 1},
{Name: 'q', Stärke: 1}, {Name: 'r', Stärke: 1}, {Name: 's', Stärke: 1}, {Name: 't', Stärke: 1}
];

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.

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