En comparant 2 cordes par ordre alphabétique à des fins de tri

J'essaie de comparer 2 chaînes par ordre alphabétique à des fins de tri. Par exemple, je souhaite avoir une vérification booléenne comme if('aaaa' < 'ab') . Je l'ai essayé, mais ça ne me donne pas les résultats corrects, alors je suppose que ce n'est pas la bonne syntaxe. Comment puis-je le faire en jquery ou en Javascript?

Examinons certains cas de test: essayez d'exécuter les expressions suivantes dans votre console JS:

 "a" < "b" "aa" < "ab" "aaa" < "aab" 

Tout retourne vrai.

JavaScript compare les chaînes par caractère et "a" vient avant "b" dans l'alphabet – donc inférieur à.

Dans votre cas, cela fonctionne comme si –

1 . "A aaa" <"a b"

Compare les deux premiers caractères "a" – tous égaux, nous allons passer au prochain personnage.

2. "A aa" <"a b"

Compare les deuxièmes caractères "a" contre "b" – whoop! "A" vient avant "b". Retourne vrai.

Vous dites que la comparaison est à des fins de tri. Ensuite, je propose plutôt:

 "a".localeCompare("b"); 

Il renvoie -1 puisque "a" < "b" , 1 ou 0 sinon, comme vous avez besoin pour Array.prototype.sort ()

Gardez à l'esprit que le tri dépend de la localisation. Par exemple, en allemand, ä est une variante de a , donc "ä".localeCompare("b", "de-DE") renvoie -1 . En suédois, ä est l'une des dernières lettres de l'alphabet, alors "ä".localeCompare("b", "se-SE") retourne 1 .

Sans le deuxième paramètre à localeCompare , les paramètres régionaux du navigateur sont utilisés. Ce qui, dans mon expérience, n'est jamais ce que je veux, car il va trier différemment que le serveur, qui a un lieu fixe pour tous les utilisateurs.

Rappelez-vous simplement que la comparaison de chaînes comme "x"> "X" est sensible à la casse

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

"a".localeCompare("b") devrait réellement retourner -1 depuis a sorte avant b

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