JavaScript: сортировка массива объектов по полю
Массив объектов сортируют методом sort() с компаратором: верните отрицательное число, если первый элемент должен идти раньше, положительное — если позже, и ноль при равенстве. Для текста с русскими буквами используйте localeCompare().
Числовое поле по возрастанию
const users = [{name: 'Ира', age: 32}, {name: 'Антон', age: 24}];
users.sort((a, b) => a.age - b.age);
console.log(users.map((user) => user.name).join(',')); // Антон,Ираsort() меняет исходный массив. Если исходник нужно сохранить, сначала скопируйте его через toSorted() (современные среды) или [...items].sort(...).
Строки с учётом русской локали
const names = ['Яна', 'Антон', 'Ира'];
names.sort((a, b) => a.localeCompare(b, 'ru'));
console.log(names.join(',')); // Антон,Ира,ЯнаСначала статус, затем имя
const tasks = [{done: true, title: 'Б'}, {done: false, title: 'Я'}, {done: false, title: 'А'}];
tasks.sort((a, b) => Number(a.done) - Number(b.done)
|| a.title.localeCompare(b.title, 'ru'));
console.log(tasks.map((task) => task.title).join(',')); // А,Я,БСортировка | Компаратор |
|---|---|
Числа по возрастанию |
|
Строки |
|
| По двум полям | сравнить первое || сравнить второе |
Как отсортировать по убыванию?
Поменяйте операнды местами (b.value - a.value) или умножьте числовой компаратор на -1.
Как не менять исходный массив?
В современных браузерах используйте items.toSorted(compareFn). Для совместимости создайте копию: [...items].sort(compareFn).