comparar 2 cadenas alfabéticamente para fines de clasificación


105

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



Asi es como lo haces. ¿Qué resultado esperas? La expresión 'aaaa' < 'ab'regresa true. <! - edición falsa para eliminar el voto ->
Guffa

Respuestas:


122

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

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Todos vuelven verdaderos.

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

En tu caso funciona así:

1. " Un aaa" < " un b"

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

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

compara los segundos caracteres "a" con "b" - ¡whoop! "a" viene antes que "b". Devuelve verdadero.


2
para obtener información sobre caracteres especiales como Č, č, Š, š, Ž, ž, consulte stackoverflow.com/questions/6909126/…
dsdsdsdsd

4
¡Impresionante que esté integrado de forma nativa!
Slava Knyazev

11
Algo a tener en cuenta serían las mayúsculas. "a" < "b" === true "a" < "B" === false.
Ted van Riel

141

Dice que la comparación es para fines de clasificación. Entonces sugiero en su lugar:

"a".localeCompare("b");

Vuelve -1desde "a" < "b", 1o de lo 0contrario, como lo necesita para Array.prototype.sort ()

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

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


6
+1 también vale la pena mencionar que esto también está bien para los casos ( "aa".localeCompare("ab")== "aa" .localeCompare ("Ab") para cualquier configuración regional que se me ocurra) y funciona incluso en versiones antiguas de IE. ¡Debería ser la respuesta aceptada!
user56reinstatemonica8

1
+1 para Peter; Esto es más compatible con cómo funciona la ordenación de matrices de Javascript de todos modos, por lo que es más útil, y creo que es más de lo que pedía el OP.
Gran cierre el

Supongo que esta debería ser la respuesta correcta. La única forma de hacer una comparación de cadenas alfabética ( no Unicode ).
Limbo

Esto pareció funcionar realmente, incluso para valores alfanuméricos. Gracias.
Joshua Pinter

30

Solo recuerde que la comparación de cadenas como "x"> "X" distingue entre mayúsculas y minúsculas

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

Puede utilizar .toLowerCase()para comparar sin distinción entre mayúsculas y minúsculas.



3

Digamos que tenemos una matriz de objetos:

{ name : String }

entonces podemos ordenar nuestra matriz de la siguiente manera:

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

Nota: tenga cuidado con las letras mayúsculas, es posible que deba convertir su cadena en minúsculas debido a su propósito.


Se supone que la función utilizada para ordenar devuelve 0 si son iguales. Esta función solo devuelve -1 o 1.
Steve
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.