Trier un tableau d'objets en JavaScript

Trier un tableau d'objets en JavaScript (générateur de comparateur) | We.Inc

Construisez un comparateur en quelques clics : triez des objets par nombre, chaîne, date ou deux clés, avec les options de localeCompare, et voyez le résultat et le code côte à côte.

Trier un tableau d'objets en JavaScript

Passez à sort une fonction de comparaison qui examine la propriété qui vous intéresse. Pour des nombres, renvoyez a.price - b.price. Pour du texte, renvoyez a.name.localeCompare(b.name). Pour des dates, soustrayez les timestamps. Un résultat négatif place a en premier, un résultat positif place b en premier. Utilisez toSorted au lieu de sort quand l'ordre d'origine doit être conservé.

Le comparateur pour chaque type de clé

Trier des objets piège les développeurs pour trois raisons : le tri par défaut compare tout comme du texte, les majuscules passent avant les minuscules avec une simple comparaison inférieur à, et sort réécrit le tableau que vous lui passez. Le générateur ci-dessous vous permet d'actionner chacun de ces réglages sur une petite liste d'équipe et de voir l'ordre changer, avec le comparateur correspondant prêt à copier.

Questions fréquentes

Comment trier un tableau d'objets par propriété ?

Appelez people.sort((a, b) => a.age - b.age) pour une propriété numérique ou people.sort((a, b) => a.name.localeCompare(b.name)) pour une chaîne. Inversez a et b pour changer le sens.

Comment trier sur deux champs ?

Comparez le premier champ et ne passez au second qu'en cas d'égalité sur le premier : (a, b) => a.team.localeCompare(b.team) || a.age - b.age. Le || fonctionne car une égalité renvoie 0, qui compte comme faux.

Le tri JavaScript est-il stable ?

Oui. Depuis ECMAScript 2019, sort doit être stable, donc les éléments considérés comme égaux gardent leur ordre précédent. C'est pourquoi trier d'abord par nom puis par équipe donne une liste groupée par équipe avec les noms dans l'ordre au sein de chaque groupe.

sort modifie-t-il le tableau d'origine ?

Oui. sort réordonne le tableau sur place et renvoie ce même tableau. toSorted prend la même fonction de comparaison mais renvoie un nouveau tableau et laisse l'ordre d'origine intact. Il est disponible dans les principaux navigateurs depuis juillet 2023.

Pourquoi les noms en minuscules sont-ils triés après ceux en majuscules ?

Une simple comparaison < ou > compare les codes de caractères, et chaque majuscule a un code inférieur à celui de chaque minuscule. localeCompare suit plutôt l'alphabet de la langue et, avec { sensitivity: 'base' }, considère aussi accents et casse comme équivalents.

Ce que renvoie réellement la fonction de comparaison

Dates, valeurs manquantes et types mélangés

Pourquoi sort() sans argument trie mal les nombres

Sans fonction de comparaison, chaque élément est converti en chaîne et comparé par unités de code UTF-16, donc le premier caractère l'emporte.

Ordre par défaut contre comparateur numérique

Le tri par défaut place 100 avant 25 car le texte '1' vient avant '2'.

Tris multi-clés, sensibles à la langue et sans mutation

Équipe de A à Z, puis du plus ancien, sans toucher à l'original

La chaîne de || ne passe à la clé suivante que si la comparaison précédente vaut 0. toSorted renvoie un nouveau tableau.

Un seul Intl.Collator pour une longue liste

numeric: true place T-2 avant T-10, et sensitivity: 'base' ignore la casse et les accents.

Un helper sortBy réutilisable

Passez les noms des clés dans l'ordre. Un signe moins devant une clé la trie par ordre décroissant.

Générateur de comparateur

Choisissez comment trier la liste d'équipe d'exemple : le tableau et le code se mettent à jour ensemble.

Trier par

Puis par (départage)

Rien

Sens

Croissant

Décroissant

Comparaison de texte

Simples < et >

localeCompare

localeCompare, numérique et insensible à la casse

Liste d'exemple utilisée par le générateur de comparateur (ordre d'origine)

Résultat du comparateur

Comparateur

Copier le code

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site