Modulo 6 · Lezione 4 di 424/32 nel corso~12 min
Lezioni del modulo (4/4)
sort
Ordinare un array in JavaScript ha una grossa trappola: sort() modifica l'array originale
e per default ordina come stringhe.
La trappola
JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20] ← !? ordinati come stringhe: "1" < "10" < "2"Per ordinamento numerico devi passare un comparatore (a, b) => number:
a - b< 0 →ava primaa - b> 0 →bva primaa - b=== 0 → ordine invariato
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] ← decrescenteOrdinare oggetti per un campo
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}]Per stringhe puoi confrontarle con localeCompare:
JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']Non mutare l'originale
Due opzioni:
JS
// 1) copia + sort
const copia = [...nums].sort((a, b) => a - b);
// 2) toSorted (moderno, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);Prova tu
Esercizio#js.m6.l4.e1
Tentativi: 0Caricamento…
Definisci `sortAscending(nums)`: ritorna una NUOVA copia dell'array, ordinata in modo crescente come numeri. L'originale non deve cambiare.
Caricamento editor…
Mostra suggerimento
[...nums].sort((a, b) => a - b)
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Esercizio#js.m6.l4.e2
Tentativi: 0Caricamento…
Definisci `sortByAgeAscending(people)`: dato un array di { name, age }, ritorna una nuova copia ordinata per age crescente. L'originale non deve cambiare.
Caricamento editor…
Mostra suggerimento
[...people].sort((a, b) => a.age - b.age)
Soluzione disponibile dopo 3 tentativi