Lekcje modułu (4/4)
sort
Sortowanie tablicy w JavaScript kryje w sobie dużą pułapkę: sort() modyfikuje oryginalną tablicę
i domyślnie sortuje elementy jako ciągi znaków.
Pułapka
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20] ← !? ordinati come stringhe: "1" < "10" < "2"Do sortowania numerycznego należy przekazać funkcję porównującą (a, b) => number:
a - b< 0 →atrafia przedba - b> 0 →btrafia przedaa - b=== 0 → kolejność pozostaje bez zmian
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] ← decrescenteSortowanie obiektów według pola
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}]W przypadku ciągów znaków można je porównać za pomocą localeCompare:
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']Zachowanie oryginalnej tablicy (brak mutacji)
Dwie opcje:
// 1) copia + sort
const copia = [...nums].sort((a, b) => a - b);
// 2) toSorted (moderno, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);Spróbuj sam
Zdefiniuj funkcję `sortAscending(nums)`: zwraca NOWĄ kopię tablicy, posortowaną numerycznie rosnąco. Oryginalna tablica nie może ulec zmianie.
Pokaż wskazówkę
[...nums].sort((a, b) => a - b)
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Zdefiniuj funkcję `sortByAgeAscending(people)`: dla danej tablicy obiektów { name, age } zwraca nową kopię posortowaną rosnąco według wieku (age). Oryginalna tablica nie może ulec zmianie.
Pokaż wskazówkę
[...people].sort((a, b) => a.age - b.age)
Rozwiązanie dostępne po 3 próbach