2012-04-17 19 views
51

Próbuję porównać 2 ciągi alfabetycznie dla celów sortowania. Na przykład chcę mieć sprawdzanie boolowskie, takie jak if('aaaa' < 'ab'). Próbowałem, ale nie daje to poprawnych wyników, więc myślę, że to nie jest właściwa składnia. Jak to zrobić w jquery lub JavaScript?porównanie 2 ciągów alfabetycznie do celów sortowania

+2

Widziałeś http://stackoverflow.com/questions/1134976/how-may-i-sort-a-list-alphabetically -używania-jquery? – j08691

+0

Tak to robisz. Jakiego wyniku oczekujesz? Wyrażenie "aaaa" <'ab'' zwraca 'true'. Guffa

Odpowiedz

73

Spójrzmy na niektórych przypadków testowych - spróbuj uruchomić następujące wyrażenia w konsoli JS:

"a" < "b" 

"aa" < "ab" 

"aaa" < "aab" 

Wszystko return true.

JavaScript porównuje ciągi znaków według znaków i "a" pojawia się przed "b" w alfabecie - stąd mniej niż.

W twoim przypadku to działa jak tak -

1. " aaa" < " b"

porównuje dwa pierwsze znaki "a" - wszyscy równi, pozwala przejść do następnego znaku.

2. "A aa" < "a b"

porównuje drugi znaki "a" przeciw "B" - whoop! "a" występuje przed "b". Zwraca true.

+1

w celu omówienia znaków specjalnych, takich jak Č, č, Š, š, Ž, ž, patrz http://stackoverflow.com/questions/6909126/javascript-sort-with-unicode – dsdsdsdsd

+2

Imponujące, że jest to wbudowane natywnie! –

+4

Należy pamiętać o stolicach. '" a "<" b "=== true'' "a" <"B" === false'. – MegaXLR

20

Wystarczy pamiętać, że porównanie ciąg jak „x”> „X” jest rozróżniana

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

Ty mów, że porównanie jest dla celów sortowania. To proponuję zamiast:

"a".localeCompare("b"); 

Zwraca -1 ponieważ "a" < "b", 1 lub 0 inaczej, jak trzeba do Array.prototype.sort()

Pamiętaj, że sortowanie jest zależne od ustawień regionalnych. Na przykład. w języku niemieckim: ä jest odmianą a, więc "ä".localeCompare("b", "de-DE") zwraca -1. W języku szwedzkim ä jest jedną z ostatnich liter w alfabecie, więc "ä".localeCompare("b", "se-SE") zwraca 1.

Bez drugiego parametru do localeCompare używane jest ustawienie narodowe przeglądarki. Które z mojego doświadczenia nigdy nie jest tym, czego chcę, ponieważ wtedy będzie sortować inaczej niż serwer, który ma ustalone locale dla wszystkich użytkowników.

+3

+1 także wspomnieć, że jest to również dobre dla przypadków ('" aa ".localeCompare (" ab ")' == "aa" .localeCompare ("Ab") dla dowolnego ustawienia narodowego, które mogę wymyślić) i działa nawet w stare wersje IE. Powinna być zaakceptowaną odpowiedzią! – user568458

+0

+1 dla Piotra; Jest to bardziej zgodne z tym, jak działa sortowanie tablic JavaScript, więc jest bardziej użyteczne, i myślę, że jest to więcej tego, o co prosił OP. – Grandclosing

5

"a".localeCompare("b") powinny rzeczywiście powrócić -1 od a rodzaju przed b

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

+0

Jeśli miałeś na myśli to jako komentarz do mojej odpowiedzi, masz rację. Moja odpowiedź nieprawidłowo pokazywała wynik jako 1, więc to poprawiłem. –

Powiązane problemy