Trier des chaînes de caractères en Javascript
Quand la méthode sort() fait des siennes avec les strings en Javascript !
Article publié le 21/02/2022, dernière mise à jour le 22/10/2024
Avoir une liste de string et la trier dans un ordre alphabétique (ou inverse) en Javascript parait être un exercice à première vue plutôt simple.
Mais en réalité, il renferme son lot de complication, et également, une solution très simple à mettre en place.
Examinons d'abord le problème
Problème
Voici un simple exemple de l'utilisation de la méthode .sort() sur un tableau de chaînes de caractères, qui donne des résultats... étranges :
/* Tri avec la méthode sort()*/
const arr = ["Chien", "abricot", "électron","résistance", "Tomate"];
const sortedArray = arr.sort();
console.log(sortedArray);
// Fail -> Array(5) [ "Chien", "Tomate", "abricot", "résistance", "électron" ]
Si l'on prend simplement les premières lettres de chaque mot dans la liste triée "c, t, a, r, é", on voit déjà un problème, mais qu'elle est l'explication ?
Javascript va tout simplement trouver un moyen mathématique de trier cette liste, et choisir de regarder dans le tableau ascii la valeur numérique de chaque lettre, et les comparer entres-elles.
En l’occurrence, les valeurs des lettres majuscules sont toujours plus petites (65+) que les minuscules (97+), et les lettres accentuées sont beaucoup plus grandes (128+).
Solution
Heureusement il existe une méthode spéciale en Javascript pour comparer deux caractères ensemble, en tenant compte de la langue de l'utilisateur, et couplé à la méthode sort, on arrive finalement à un réel tri par ordre alphabétique, sans problème d'accent ni de majuscule :
/* Tri avec la méthode sort() et localeCompare()*/
const arr = ["Chien", "abricot", "électron","résistance", "Tomate"];
const sortedArray = arr.sort(function (a, b) {
return a.localeCompare(b);
});
console.log(sortedArray);
// Hourra ! -> Array(5) [ "abricot", "Chien", "électron", "résistance", "Tomate" ]
Aucun commentaire pour l'instant