Перейти до основного вмісту
Модуль 6 · Урок 4 із 424/32 у курсі~12 min
Модульні уроки (4/4)

сортувати

Сортування масиву в JavaScript містить велику пастку: sort() змінює вихідний масив і за умовчанням сортує як рядки.

Пастка

JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20]   ← !? sorted as strings: "1" < "10" < "2"

Для числового сортування потрібно передати компаратор (a, b) => number:

  • a - b < 0 → a стоїть першим
  • a - b > 0 → b стоїть першим
  • a - b === 0 → порядок без змін
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]    ← descending

Сортування об'єктів за полем

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}]

Рядки можна порівняти з localeCompare:

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

Не змінюючи оригінал

Два варіанти:

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

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

Спробуйте

вправи#js.m6.l4.e1
Спроби: 0Завантаження…

Визначте `sortAscending(nums)`: повертає НОВУ копію масиву, відсортованого за зростанням чисел. Оригінал не повинен змінюватися.

Завантаження редактора…
Показати підказку

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

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m6.l4.e2
Спроби: 0Завантаження…

Визначте `sortByAgeAscending(people)`: задано масив { name, age }, повертає нову копію, відсортовану за віком у порядку зростання. Оригінал не повинен змінюватися.

Завантаження редактора…
Показати підказку

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

Рішення доступне після 3 спроб