JavaScript: сортировка массива объектов по полю

Категория: JavaScript · Язык: JavaScript · Обновлено:

Массив объектов сортируют методом sort() с компаратором: верните отрицательное число, если первый элемент должен идти раньше, положительное — если позже, и ноль при равенстве. Для текста с русскими буквами используйте localeCompare().

Числовое поле по возрастанию

JavaScript
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(...).

Строки с учётом русской локали

JavaScript
const names = ['Яна', 'Антон', 'Ира'];
names.sort((a, b) => a.localeCompare(b, 'ru'));
console.log(names.join(',')); // Антон,Ира,Яна

Сначала статус, затем имя

JavaScript
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(',')); // А,Я,Б

Сортировка

Компаратор

Числа по возрастанию

(a, b) => a.value - b.value

Строки

(a, b) => a.name.localeCompare(b.name, 'ru')

| По двум полям | сравнить первое || сравнить второе |

Как отсортировать по убыванию?

Поменяйте операнды местами (b.value - a.value) или умножьте числовой компаратор на -1.

Как не менять исходный массив?

В современных браузерах используйте items.toSorted(compareFn). Для совместимости создайте копию: [...items].sort(compareFn).