13

Как отсортировать массив объектов по свойству даты?

24

У меня есть массив с несколькими объектами:

var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];

Как я могу отсортировать этот массив по элементу даты, начиная с даты, ближайшей к текущему времени? Учитывайте, что массив может содержать много объектов, но для простоты я использую только два.

Правильно ли я понимаю, что мне нужно использовать функцию sort и написать собственный компаратор?

5 ответ(ов)

1

После исправления JSON у вас теперь должно работать так:

var array = [{id: 1, date:'Mar 12 2012 10:00:00 AM'}, {id: 2, date:'Mar 8 2012 08:00:00 AM'}];

array.sort(function(a, b) {
    var c = new Date(a.date);
    var d = new Date(b.date);
    return c - d;
});

Этот код сортирует массив объектов по дате, используя встроенный метод sort(). Мы создаем новые даты с помощью конструктора Date и вычитаем их, что возвращает разницу в миллисекундах. Таким образом, массив будет отсортирован по возрастанию дат.

0

Все приведённые ответы хороши 😊. Вот моя реализация сортировки дат в стиле ES6. Я использую Date.parse (глобальный объект Date), который конвертирует строковое представление даты в количество миллисекунд. Это позволяет избежать создания нового объекта Date каждый раз.

const array = ["2021-08-10T07:24:30.087+0000", "2021-09-30T07:24:30.087+0000", "2021-10-13T07:24:30.087+0000"];

// сортировка с последней датой
array.sort((a, b) => Date.parse(b) - Date.parse(a));

Таким образом, ваш массив будет отсортирован по убыванию дат.

0

Ваши данные нуждаются в корректировке. В приведенном коде порядок сортировки по дате может не работать должным образом, если даты не указаны в правильном формате. Рекомендуется использовать формат ISO 8601 для более надежной обработки дат.

Вот пример исправленного кода:

var array = [
    { id: 1, date: "2012-03-12T10:00:00" },
    { id: 2, date: "2012-03-28T08:00:00" }
];

function sortFunction(a, b) {  
    var dateA = new Date(a.date).getTime();
    var dateB = new Date(b.date).getTime();
    return dateA - dateB;  
} 

array.sort(sortFunction);

После исправлений массив будет отсортирован по дате корректно. Убедитесь, что даты указаны в формате, который JavaScript может правильно распознать.

0

Если ваша дата имеет формат (дд/мм/гггг), то вы можете использовать следующий код для сортировки массива объектов по дате:

sortByDate(arr) {
  arr.sort(function(a, b) {
    return Number(new Date(a.readableDate.split('/').reverse().join('-'))) - Number(new Date(b.readableDate.split('/').reverse().join('-')));
  });

  return arr;
}

Этот код преобразует строку даты из формата "дд/мм/гггг" в формат "гггг-мм-дд", который корректно распознается объектом Date. Затем вызывайте функцию так: sortByDate(myArr);.

0

Вы можете отсортировать массив объектов arr, каждый из которых содержит свойство date_prop с датой, в порядке убывания (по убыванию). Для этого вы можете использовать следующий код:

arr = arr.sort(function (a, b) {
      var dateA = new Date(a.date_prop).getTime();
      var dateB = new Date(b.date_prop).getTime();
      return dateA < dateB ? 1 : -1; // для сортировки по возрастанию используйте ? -1 : 1
});

В этом коде мы сначала преобразуем даты в миллисекунды с помощью getTime(), а затем сравниваем их. Если dateA меньше dateB, возвращаем 1, что приводит к тому, что объект с dateB будет расположен перед объектом с dateA в отсортированном массиве. Для сортировки по возрастанию нужно заменить 1 на -1 и -1 на 1 в тернарном условии.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь