@xster

Как отсортировать массив, если часть значений — undefined?

Как сделать сортировку массива объектов по значению даты?
Дата - обычное число в секундах.
Проблема в том, что не в каждом объекте это значение даты есть, в результате сортировка не происходит.
Мне нужно, чтобы объекты в которых есть это значение даты, находились в начале массива, а тогда бы уже эти объекты сортировался по дате между собой.
То есть, сейчас застрял на этом - если в объекте данное значении не undefined, ставить его на начало.
  • Вопрос задан
  • 305 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Отсортировать существующий массив:

arr.sort(({ date: a }, { date: b }) => !a ? 1 : !b ? -1 : a - b);
// или
arr.sort((a, b) => (a.date || Infinity) - (b.date || Infinity));

Собрать отсортированный новый:

const sortedArr = arr
  .map(n => [ n, n.hasOwnProperty('date') ? n.date : Infinity ])
  .sort((a, b) => a[1] - b[1])
  .map(n => n[0]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
loktionov129
@loktionov129
Backend .NET Developer
const items = [
  {id: 1},
  {id: 2, date: 13456},
  {id: 3},
  {id: 4, date: 29996},
  {id: 5},
  {id: 6, date: 73456},
  {id: 7, date: 10000},
  {id: 8, date: 1000}
];

console.warn(items);
const sortedItems = [...items].sort((a, b) => (!a.date) || (b.date && a.date > b.date));
console.warn(sortedItems);


5a085720c964f510477259.png
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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