Heim > Web-Frontend > js-Tutorial > Warum reicht ein boolescher Rückgabewert für die Array.sort-Vergleichsfunktion von JavaScript nicht aus?

Warum reicht ein boolescher Rückgabewert für die Array.sort-Vergleichsfunktion von JavaScript nicht aus?

Barbara Streisand
Freigeben: 2025-01-04 06:02:41
Original
149 Leute haben es durchsucht

Why Isn't a Boolean Return Value Enough for JavaScript's Array.sort Comparison Function?

Sollte die Rückgabe eines Booleschen Werts für eine Vergleichsfunktion in JavaScript nicht ausreichen?

Die Array.sort-Methode von JavaScript ermöglicht benutzerdefinierte Vergleichsfunktionen zum Sortieren von Elementen und eine häufig gestellte Frage entsteht: Kann eine einfache Vergleichsfunktion, die einen booleschen Wert zurückgibt, zum Sortieren ausreichen? Die Antwort lautet eindeutig Nein.

Warum ein boolescher Vergleich unzureichend ist

Eine Vergleichsfunktion in JavaScript sollte die folgenden Regeln einhalten:

  • Eine Zahl zurückgeben: größer als 0, wenn a nach b sortiert werden soll, 0, wenn gleich, und kleiner als 0, wenn a vorher sortiert werden soll b.
  • Seien Sie konsistent: Wenn vergleichen(a, b) > 0, dann vergleiche(b, a) < 0, und wenn vergleichen(a, b) == 0, dann vergleichen(b, a) == 0.

Die Rückgabe eines booleschen Werts garantiert jedoch keine Konsistenz. Wenn beispielsweise „compare(a, b)“ „false“ (oder entsprechend 0) zurückgibt, impliziert dies, dass a entweder gleich oder kleiner als b ist. Dies verletzt die Transitivitätseigenschaft, die für Sortieralgorithmen erforderlich ist.

Gegenbeispiel

Betrachten Sie diese Vergleichsfunktion:

function compare(a, b) {
  return a > b;
}<p>Sie gibt einen booleschen Wert zurück: true, wenn a größer als b ist, andernfalls falsch.</p>
<p>Mit dieser Funktion in sort, wir haben:</p>
<pre class="brush:php;toolbar:false">[0, 1, 0].sort(compare); // [0, 1, 0] or [1, 0, 0] (varies between implementations)
[1, 1, 0, 2].sort(compare); // [0, 1, 2, 1] or [1, 1, 0, 2] (varies between implementations)
Nach dem Login kopieren

Die Ergebnisse sind inkonsistent, da die Vergleichsfunktion keine Transitivität erzwingt.

Korrekte Vergleichsfunktionen

Um eine konsistente Sortierung sicherzustellen, verwenden Sie Vergleichsfunktionen, die die zurückgeben korrekte numerische Werte:

  • Lexikografische Sortierung: Verwenden Sie sort() ohne a Benutzerdefinierte Funktion für die einfache Sortierung von Zeichenfolgen oder Zahlen.
  • Numerische Sortierung: Verwenden Sie (a, b) => a - b zum Sortieren von Zahlen in aufsteigender Reihenfolge.
  • Benutzerdefinierte Sortierung: Implementieren Sie Vergleichsfunktionen, die den oben beschriebenen Regeln folgen und dabei die spezifischen Eigenschaften berücksichtigen, nach denen Sie sortieren möchten.

Durch Befolgen dieser Richtlinien können Sie ein zuverlässiges und vorhersehbares Sortierverhalten in Ihrem JavaScript-Code sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum reicht ein boolescher Rückgabewert für die Array.sort-Vergleichsfunktion von JavaScript nicht aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage