Vergleichen von 2 Zeichenfolgen alphabetisch zum Sortieren

105

Ich versuche, 2 Zeichenfolgen zum Sortieren alphabetisch zu vergleichen. Zum Beispiel möchte ich eine boolesche Prüfung wie haben if('aaaa' < 'ab'). Ich habe es versucht, aber es gibt mir nicht die richtigen Ergebnisse, also denke ich, dass das nicht die richtige Syntax ist. Wie mache ich das in jquery oder Javascript?

gleichalt
quelle
2
Haben Sie stackoverflow.com/questions/1134976/… gesehen ?
j08691
So macht man das. Welches Ergebnis erwarten Sie? Der Ausdruck 'aaaa' < 'ab'kehrt zurück true. <! - Falsche Bearbeitung, um die Abstimmung zu entfernen ->
Guffa

Antworten:

122

Schauen wir uns einige Testfälle an - versuchen Sie, die folgenden Ausdrücke in Ihrer JS-Konsole auszuführen:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Alle geben true zurück.

JavaScript vergleicht Zeichenfolgen Zeichen für Zeichen und "a" steht im Alphabet vor "b" - daher weniger als.

In Ihrem Fall funktioniert es so -

1. " A aaa" < " a b"

vergleicht die ersten beiden "a" -Zeichen - alle gleich, lassen Sie uns zum nächsten Zeichen übergehen.

2. "a a aa" < "a b "

vergleicht die zweiten Zeichen "a" mit "b" - whoop! "a" kommt vor "b". Gibt true zurück.

Lix
quelle
2
Eine Diskussion über Sonderzeichen wie Č, č, Š, š, Ž, ž finden Sie unter stackoverflow.com/questions/6909126/…
dsdsdsdsd
4
Beeindruckend, dass dies nativ eingebaut ist!
Slava Knyazev
11
Etwas zu beachten wäre Hauptstädte. "a" < "b" === true "a" < "B" === false.
Ted van Riel
141

Sie sagen, dass der Vergleich zu Sortierzwecken dient. Dann schlage ich stattdessen vor:

"a".localeCompare("b");

Es gibt -1da "a" < "b", 1oder auf 0andere Weise, wie Sie benötigen Array.prototype.sort ()

Beachten Sie, dass die Sortierung vom Gebietsschema abhängt. ZB auf Deutsch, äist eine Variante von a, "ä".localeCompare("b", "de-DE")kehrt also zurück -1. Auf Schwedisch äist einer der letzten Buchstaben im Alphabet, "ä".localeCompare("b", "se-SE")kehrt also zurück 1.

Ohne den zweiten Parameter to localeComparewird das Gebietsschema des Browsers verwendet. Was meiner Erfahrung nach nie das ist, was ich will, denn dann wird es anders sortiert als der Server, der ein festes Gebietsschema für alle Benutzer hat.

Peter V. Mørch
quelle
6
+1 Erwähnenswert ist auch, dass dies auch für Fälle in Ordnung ist ( "aa".localeCompare("ab")== "aa" .localeCompare ("Ab") für jedes denkbare Gebietsschema) und sogar in alten Versionen von IE funktioniert. Sollte die akzeptierte Antwort sein!
user56reinstatemonica8
1
+1 für Peter; Dies ist ohnehin kompatibler mit der Funktionsweise der Javascript-Array-Sortierung, daher ist es nützlicher, und ich denke, es ist eher das, wonach das OP gefragt hat.
Grandclosing
Ich nehme an, das sollte die richtige Antwort sein. Die einzige Möglichkeit, alphabetische ( nicht Unicode- ) Zeichenfolgen zu vergleichen.
Limbo
Dies schien wirklich der Trick zu sein, selbst für alphanumerische Werte. Vielen Dank.
Joshua Pinter
30

Denken Sie daran, dass bei einem Zeichenfolgenvergleich wie "x"> "X" zwischen Groß- und Kleinschreibung unterschieden wird

"aa" < "ab" //true
"aa" < "Ab" //false

Sie können verwenden .toLowerCase(), um ohne Groß- und Kleinschreibung zu vergleichen.

Sielu
quelle
8

"a".localeCompare("b")sollte eigentlich -1da asortieren vorherb

http://www.w3schools.com/jsref/jsref_localecompare.asp

Shalom Friss
quelle
1
Wenn Sie dies als Kommentar zu meiner Antwort gemeint haben, haben Sie Recht. Meine Antwort zeigte das Ergebnis fälschlicherweise als 1 an, daher habe ich das korrigiert.
Peter V. Mørch
3

Nehmen wir an, wir haben eine Reihe von Objekten:

{ name : String }

dann können wir unser Array wie folgt sortieren:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

Hinweis: Achten Sie auf Großbuchstaben. Möglicherweise müssen Sie Ihre Zeichenfolge aufgrund Ihres Zwecks in Kleinbuchstaben umwandeln.

Eray Xx
quelle
Die zum Sortieren verwendete Funktion soll 0 zurückgeben, wenn sie gleich sind. Diese Funktion gibt nur -1 oder 1 zurück.
Steve