[JS] Trier un tableau de strings en ordre descendant... sans se faire avoir!
Par Nouvelle-Techno.fr le 26 août 2021 - Catégories : Javascript
Lire l'article sur le site d'origine
Salut jeune soldat du code.
Pour trier un tableau en JavaScript, tu as une méthode à ta disposition : sort().
Il est fort probable que tu la connaisses déjà. Mais as-tu déjà essayé de trier un tableau de strings en ordre descendant, strings pouvant contenir des diacritics (accents et autres décorations de la lettre) ?
Essayons ensemble le code suivant :
const users = ['Sophie', 'Amandine', 'René', 'Karim', 'Céline', 'Jeff', 'Mathilde', 'Charles-Henri', 'Karine', 'Benoit'];
const result = users.slice().sort().reverse();
console.log(result);
Crois-tu que la variable 'result' va contenir tous les prénoms de tes proches (ou moins proches) dans l'ordre alphabétique descendant ? Que néni!
Le retour te donnera ceci :
['Sophie', 'René', 'Mathilde', 'Karine', 'Karim', 'Jeff', 'Céline', 'Charles-Henri', 'Benoit', 'Amandine']
L'on peut voir que Céline apparait AVANT Charles-Henri… mais que se passe t-il donc ? Qu'est-ce donc cette diablerie ?!
C'est tout à fait normal rassure toi. La valeur UNICODE du caractère ‘é’ a un code 233 alors que celle du caractère ‘h’ est de 104. Voilà pourquoi.
Si tu tiens à avoir un tri correct, tu peux faire intervenir la méthode localeCompare().
const users = ['Sophie', 'Amandine', 'René', 'Karim', 'Céline', 'Jeff', 'Mathilde', 'Charles-Henri', 'Karine', 'Benoit'];
const result = users.slice().sort((a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true})).reverse();
console.log(result);
Bingo moussaillon, à présent ton tableau est correctement trié. :clownarmy: