Как отсортировать массив
Короткий ответ
Для чисел в sort() нужно передать функцию сравнения:
console.log([10, 9, 1].sort((a, b) => a - b).join(', '));Результат:
1, 9, 10По убыванию
Поменяйте местами a и b:
console.log([10, 9, 1].sort((a, b) => b - a).join(', '));Результат:
10, 9, 1Строки
Строки с учётом правил языка сравнивает localeCompare():
console.log(['apple', 'Pear', 'avocado'].sort((a, b) => a.localeCompare(b, 'en')).join(', '));Результат:
apple, avocado, PearПо полю объекта
В функции сравнения обращайтесь к нужному свойству:
const users = [
{ name: 'Anna', age: 30 },
{ name: 'Oleg', age: 25 },
];
users.sort((a, b) => a.age - b.age);
console.log(users.map((user) => user.name).join(', '));Результат:
Oleg, AnnaНе менять исходный массив
sort() меняет сам массив. Чтобы сохранить исходный порядок, сортируйте копию:
const numbers = [3, 1, 2];
const sorted = [...numbers].sort((a, b) => a - b);
console.log(numbers.join(', '));
console.log(sorted.join(', '));Результат:
3, 1, 2
1, 2, 3Частая ошибка
Без функции сравнения sort() сравнивает числа как строки:
console.log([10, 9, 1, 100].sort().join(', '));Результат:
1, 10, 100, 9Функции из этого ответа
- Array.prototype.sort — Сортирует элементы массива.
- Array.prototype.toSorted — Возвращает отсортированную копию массива, не меняя исходный.
- String.prototype.localeCompare — Сравнивает строки по правилам языка — для сортировки по алфавиту.