2012-04-17 10 views
51

Estoy tratando de comparar 2 cadenas alfabéticamente para fines de clasificación. Por ejemplo, quiero tener un cheque booleano como if('aaaa' < 'ab'). Lo intenté, pero no me está dando los resultados correctos, así que supongo que esa no es la sintaxis correcta. ¿Cómo hago esto en jquery o Javascript?comparando 2 cadenas alfabéticamente con fines de clasificación

+2

Ha visto http://stackoverflow.com/questions/1134976/how-may-i-sort-a-list-alphabetically -using-jquery? – j08691

+0

Así es como lo haces. ¿Qué resultado esperas? La expresión ''aaaa '<' ab'' devuelve' true'. Guffa

Respuesta

73

Veamos algunos casos de prueba - intente ejecutar las siguientes expresiones en su consola JS:

"a" < "b" 

"aa" < "ab" 

"aaa" < "aab" 

todos vuelven realidad.

JavaScript compara las cadenas carácter por carácter y "a" aparece antes que "b" en el alfabeto, por lo tanto, menos que.

En su caso es que funciona como tal -

1. "un aaa" < "un b"

compara los primeros dos caracteres "a" - todos iguales, vamos a pasar al siguiente carácter.

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

compara el segundo caracteres "a" en contra de "b" - grito! "a" viene antes de "b". Devuelve verdadero.

+1

para la discusión sobre caracteres especiales como Č, č, Š, š, Ž, ž, ver http://stackoverflow.com/questions/6909126/javascript-sort-with-unicode – dsdsdsdsd

+2

¡Impresionante que esté incorporado de forma nativa! –

+4

Algo a tener en cuenta serían las mayúsculas. '" a "<" b "=== true'' "a" <"B" === false'. – MegaXLR

20

Sólo recuerde que la comparación de cadenas como "x"> "X" mayúsculas y minúsculas

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

Usted dice que la comparación es con fines de clasificación. Entonces sugiero lugar:

"a".localeCompare("b"); 

Devuelve -1 desde "a" < "b", 1 o 0 de otro modo, al igual que lo necesario para Array.prototype.sort()

Tenga en cuenta que la clasificación depende de la configuración regional. P.ej. en alemán, ä es una variante de a, por lo que "ä".localeCompare("b", "de-DE") devuelve -1. En sueco, ä es una de las últimas letras del alfabeto, por lo que "ä".localeCompare("b", "se-SE") devuelve 1.

Sin el segundo parámetro para localeCompare, se utiliza la configuración regional del navegador. Que en mi experiencia nunca es lo que quiero, porque luego se ordenará de manera diferente que el servidor, que tiene una configuración regional fija para todos los usuarios.

+3

+1 también vale la pena mencionar que esto también está bien para los casos ('" aa ".localeCompare (" ab ")' == "aa" .localeCompare ("Ab") para cualquier localidad que se me ocurra) y funciona incluso en versiones antiguas de IE. Debe ser la respuesta aceptada! – user568458

+0

+1 para Peter; Esto es más compatible con la forma en que funciona la ordenación de arreglos de Javascript, por lo que es más útil, y creo que es más de lo que el OP estaba pidiendo. – Grandclosing

5

"a".localeCompare("b") debe volver realidad -1 desde a tipo antes b

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

+0

Si se refería a esto como un comentario a mi respuesta, tiene razón. Mi respuesta solía mostrar incorrectamente el resultado como 1, así que lo corregí. –

Cuestiones relacionadas