J'ai le code JavaScript suivant:
Input code: const ary = ["Kevin", "brandy", "Andrew"]; const nary = ary.sort(); console.log(nary); Console Output: ["Andrew","Kevin","brandy"] I want the Output as: ["Andrew","brandy", "Kevin"]
Je m'attendais à ce que la sortie du code ci-dessus soit ["Andrew", "brandy", "Kevin"] code > c'est-à-dire selon l'ordre des mots dans le dictionnaire.
Mais dans la console j'obtiens le résultat:
const ary = ["Kevin", "Brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
Quand j'ai changé le b dans "brandy" en majuscules B , et a exécuté à nouveau le code,
["Andrew","Kevin","brandy"]
le résultat est attendu:
["Andrew", "Brandy", "Kevin"]
c'est-à-dire selon l'ordre des mots du dictionnaire.
Cela signifie que la priorité de tri est donnée aux mots dont la lettre de départ est en majuscule, puis les mots avec la lettre de départ en minuscule sont triés.
Mes questions sont:
Pourquoi cela se produit-il dans JavaScript?
Comment puis-je trier le tableau de chaînes ["Kevin", "brandy", "Andrew"] en fonction de l'ordre des mots dans le dictionnaire en utilisant sort () code > fonction?
const ary = ["Kevin", "brandy", "Andrew"]; const nary = ary.sort(); console.log(nary);
3 Réponses :
C'est parce que lorsqu'il n'y a pas de fonction de rappel fournie, les éléments sont triés après avoir été convertis en unités de code UTF-16. Dans votre cas, cela peut être la raison pour laquelle la chaîne convertie en utf pour Kelvin est avant brandy donc elle trie dans cet ordre.
Utilisez localeCompare
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort(function(a, b) {
return a.localeCompare(b)
});
console.log(nary);
Convertissez simplement les clés en lowerCase en premier pour que les clés deviennent insensibles à la casse. Et la raison pour laquelle cela se produit est à cause de la façon dont Javascript compare ie. ['A' Comparaison locale . Pour comparer en fonction des paramètres du navigateur.
let arr = ["Andrew","brandy", "Kevin"];
let sorted = arr.sort((a,b) => {
a.toLowerCase() > b.toLowerCase();
})
console.log(sorted);
Une réponse de ligne est localeCompare()
const ary = ["Kevin", "brandy", "Andrew"];
ary.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
console.log(ary);
Cette question a déjà plusieurs réponses, un candidat ici stackoverflow.com/questions/8996963/...
Pour votre point 1, saisissez
"a"> "B"dans la console. ou"a" .codePointAt (0)&"B" .codePointAt (0)