Задать вопрос
@danilr

Как сделать «двойную» сортировку в массиве объектов?

Есть массив объектов, в объектах есть поля rooms: number и square: number. Помогите придумать алгоритм сортировки, желательно с реализацией, как сортировать сначала по полю rooms, а в уже отсортированном массиве rooms отсортировать по square. То есть, например, из первого массива должен получиться второй
[{rooms: 2, square: 25},{rooms: 1, square: 10}, {rooms: 2, square: 20},{rooms: 1, square: 12}]
[{rooms: 1, square: 10}, {rooms: 1, square: 12}, {rooms: 2, square: 20},{rooms: 2, square: 25}]
  • Вопрос задан
  • 1089 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Сортируем существующий массив:

arr.sort((a, b) => (a.rooms - b.rooms) || (a.square - b.square));

// или, в более общем виде

const sort = (arr, ...keys) =>
  arr.sort((a, b) => {
    let diff = 0;
    keys.find(k => diff = a[k] - b[k]);
    return diff;
  });


sort(arr, 'rooms', 'square');

Создаём отсортированный новый:

const sorted = (arr, keys) => arr
  .map(n => [ n ].concat(keys(n)))
  .sort((a, b) => {
    let diff = 0;
    for (let i = 0; ++i < a.length && !(diff = a[i] - b[i]);) ;
    return diff;
  })
  .map(n => n[0]);


const sortedArr = sorted(arr, n => [ n.rooms, n.square ]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы