Modulul 6 · Lecția 4 din 424/32 în curs~12 min
Lecții din modul (4/4)
sortați
Sortarea unei matrice în JavaScript are o capcană mare: sort() modifică matricea originală
și în mod implicit sortează ca șiruri de caractere.
Capcana
JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20] ← !? sorted as strings: "1" < "10" < "2"Pentru sortarea numerică trebuie să treceți un comparator (a, b) => number:
a - b< 0 →aeste primula - b> 0 →beste primula - b=== 0 → comanda neschimbată
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20] ← ascending order
nums.sort((a, b) => b - a);
// [20, 10, 2, 1] ← descendingSortarea obiectelor după un câmp
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}]Pentru șiruri, le puteți compara cu localeCompare:
JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']Nu modifică originalul
Două opțiuni:
JS
// 1) copy + sort
const copia = [...nums].sort((a, b) => a - b);
// 2) toSorted (modern, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);Încearcă
Exercițiu#js.m6.l4.e1
Încercări: 0Se încarcă…
Definiți `sortAscending(nums)`: returnează o copie NOUĂ a matricei, sortată în ordine crescătoare ca numere. Originalul nu trebuie schimbat.
Se încarcă editorul...
Afișează indiciu
[...nums].sort((a, b) => a - b)
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Exercițiu#js.m6.l4.e2
Încercări: 0Se încarcă…
Definiți `sortByAgeAscending(people)`: având o matrice de { name, age }, returnați o nouă copie sortată după vârstă crescător. Originalul nu trebuie schimbat.
Se încarcă editorul...
Afișează indiciu
[...oameni].sort((a, b) => a.varsta - b.varsta)
Soluție disponibilă după 3 încercări