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