Trotz allgemeiner Praxis wird in JavaScript ein boolescher Wert (wahr oder falsch) zurückgegeben Vergleichsfunktionen, die zum Sortieren in JavaScript verwendet werden, sind falsch und können zu unerwarteten Ergebnissen führen.
Sortieralgorithmen erwarten von Vergleichsfunktionen, dass sie Zahlen zurückgeben, insbesondere:
Die Rückgabe eines booleschen Werts (falsch entspricht 0 und wahr entspricht 1) erfüllt die Transitivitätsanforderung für konsistente Vergleichsfunktionen nicht . Diese Anforderung stellt sicher, dass der Sortieralgorithmus auf der Grundlage früherer Vergleiche Rückschlüsse auf die Reihenfolge von Elementen ziehen kann.
Bedenken Sie die Vergleichsfunktion:
function compare(a, b) { return a > b; }
Dies Die Funktion gibt true (oder 1) zurück, wenn „a“ größer als „b“ ist, gibt aber fälschlicherweise false (oder 0) zurück, selbst wenn „b“ größer als „a“ ist. Folglich behandelt der Sortieralgorithmus „a“ und „b“ als gleich, was zu unvorhersehbaren Sortierreihenfolgen führt.
Obwohl einige grundlegende Tests bestanden wurden, schlägt die obige Vergleichsfunktion unter bestimmten Umständen fehl. wie zum Beispiel:
[0, 1, 0].sort(compare); // Result: [0, 1, 0] (expected: [0, 0, 1]) [1, 1, 0, 2].sort(compare); // Result: [0, 1, 2, 1] (expected: [0, 1, 1, 2])
Für eine lexikografische Sortierung (aufsteigend), verwenden Sie keine Vergleichsfunktion, da Elemente zum Vergleich automatisch in Zeichenfolgen umgewandelt werden.
Verwenden Sie für die numerische Sortierung:
function compareNumbers(a, b) { return a - b; }
Für komplexere Vergleiche verwenden Sie bedingte Anweisungen Geben Sie die entsprechende Nummer zurück:
function compareObjects(a, b) { if (a.property > b.property) return 1; if (a.property < b.property) return -1; return 0; }
Das obige ist der detaillierte Inhalt vonWarum führen boolesche Rückgabewerte zu unerwarteten Ergebnissen in den Sortiervergleichsfunktionen von JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!