[JS] Trier un tableau de strings en ordre descendant... sans se faire avoir!

[JS] Trier un tableau de strings en ordre descendant... sans se faire avoir!

Catégories : Javascript

Mots-clés : bases

163 lectures

Auteur : user Chef-Toucourt

Date :

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: