confrontare 2 stringhe in ordine alfabetico per scopi di ordinamento


105

Sto cercando di confrontare 2 stringhe in ordine alfabetico per scopi di ordinamento. Ad esempio, voglio avere un controllo booleano come if('aaaa' < 'ab'). L'ho provato, ma non mi dà risultati corretti, quindi immagino che non sia la sintassi giusta. Come posso farlo in jquery o Javascript?



È così che lo fai. Che risultato ti aspetti? L'espressione 'aaaa' < 'ab'ritorna true. <! - falsa modifica per rimuovere il voto ->
Guffa

Risposte:


122

Vediamo alcuni casi di test: prova a eseguire le seguenti espressioni nella tua console JS:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Tutto torna vero.

JavaScript confronta le stringhe carattere per carattere e "a" viene prima di "b" nell'alfabeto, quindi minore di.

Nel tuo caso funziona così -

1. " Un aaa" < " un b"

confronta i primi due caratteri "a" - tutti uguali, passiamo al carattere successivo.

2. "un un aa" < "un b "

confronta i secondi caratteri "a" con "b" - whoop! "a" viene prima di "b". Restituisce vero.


2
per la discussione sui caratteri speciali come C, C, S, S, Z, Z, vedi stackoverflow.com/questions/6909126/...
dsdsdsdsd

4
È impressionante che questo sia integrato in modo nativo!
Slava Knyazev

11
Qualcosa da tenere a mente sarebbero le capitali. "a" < "b" === true "a" < "B" === false.
Ted van Riel

141

Dici che il confronto è a scopo di ordinamento. Allora suggerisco invece:

"a".localeCompare("b");

Restituisce -1dal "a" < "b", 1o 0altrimenti, come è necessario per Array.prototype.sort ()

Tieni presente che l'ordinamento dipende dalla località. Ad esempio, in tedesco, äè una variante di a, quindi "ä".localeCompare("b", "de-DE")ritorna -1. In svedese, äè una delle ultime lettere dell'alfabeto, quindi "ä".localeCompare("b", "se-SE")ritorna 1.

Senza il secondo parametro to localeCompare, vengono utilizzate le impostazioni internazionali del browser. Il che nella mia esperienza non è mai quello che voglio, perché in tal caso verrà ordinato in modo diverso dal server, che ha una locale fissa per tutti gli utenti.


6
+1 vale anche la pena ricordare che questo va bene anche per i casi ( "aa".localeCompare("ab")== "aa" .localeCompare ("Ab") per qualsiasi locale mi venga in mente) e funziona anche nelle vecchie versioni di IE. Dovrebbe essere la risposta accettata!
user56reinstatemonica8

1
+1 per Peter; Questo è più compatibile con il modo in cui funziona l'ordinamento degli array Javascript, quindi è più utile e penso che sia più di quello che chiedeva l'OP.
Grandclosing

Suppongo che questa dovrebbe essere la risposta giusta. L'unico modo per confrontare stringhe alfabetiche ( non Unicode ).
Limbo

Questo sembrava davvero fare il trucco, anche per i valori alfanumerici. Grazie.
Joshua Pinter

30

Ricorda solo che il confronto tra stringhe come "x"> "X" fa distinzione tra maiuscole e minuscole

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

È possibile utilizzare .toLowerCase()per confrontare senza distinzione tra maiuscole e minuscole.



3

Diciamo che abbiamo un array di oggetti:

{ name : String }

quindi possiamo ordinare il nostro array come segue:

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

Nota: fai attenzione alle lettere maiuscole, potresti dover trasformare la stringa in minuscolo a causa del tuo scopo.


La funzione utilizzata per l'ordinamento dovrebbe restituire 0 se sono uguali. Questa funzione restituisce solo -1 o 1.
Steve il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.