Passer au contenu principal
eLearner.app
Module 6 · Leçon 4 sur 424/32 dans le cours~12 min
Leçons du module (4/4)

sort

Trier un tableau en JavaScript comporte un piège majeur : sort() modifie le tableau d'origine et trie par défaut comme des chaînes de caractères.

Le piège

JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20]   ← !? ordinati come stringhe: "1" < "10" < "2"

Pour un tri numérique, vous devez passer un comparateur (a, b) => number :

  • a - b < 0 → a va avant
  • a - b > 0 → b va avant
  • a - b === 0 → ordre inchangé
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20]    ← ordine crescente

nums.sort((a, b) => b - a);
// [20, 10, 2, 1]    ← decrescente

Trier des objets par un champ

JS
const utenti = [
  { nome: 'Anna', eta: 30 },
  { nome: 'Luca', eta: 12 },
  { nome: 'Sara', eta: 18 },
];

utenti.sort((a, b) => a.eta - b.eta);
// [{Luca,12}, {Sara,18}, {Anna,30}]

Pour les chaînes de caractères, vous pouvez les comparer avec localeCompare :

JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']

Ne pas modifier l'original

Deux options :

JS
// 1) copia + sort
const copia = [...nums].sort((a, b) => a - b);

// 2) toSorted (moderno, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);

À vous de jouer

Exercice#js.m6.l4.e1
Tentatives : 0Chargement…

Définissez `sortAscending(nums)` : retourne une NOUVELLE copie du tableau, triée par ordre croissant en tant que nombres. Le tableau d'origine ne doit pas changer.

Chargement de l'éditeur…
Afficher l'indice

[...nums].sort((a, b) => a - b)

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m6.l4.e2
Tentatives : 0Chargement…

Définissez `sortByAgeAscending(people)` : à partir d'un tableau d'objets { name, age }, retourne une nouvelle copie triée par age croissant. Le tableau d'origine ne doit pas changer.

Chargement de l'éditeur…
Afficher l'indice

[...people].sort((a, b) => a.age - b.age)

Solution disponible après 3 tentatives