Как отсортировать массив объектов по свойству даты?
У меня есть массив с несколькими объектами:
var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];
Как я могу отсортировать этот массив по элементу даты, начиная с даты, ближайшей к текущему времени? Учитывайте, что массив может содержать много объектов, но для простоты я использую только два.
Правильно ли я понимаю, что мне нужно использовать функцию sort и написать собственный компаратор?
5 ответ(ов)
После исправления 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
и вычитаем их, что возвращает разницу в миллисекундах. Таким образом, массив будет отсортирован по возрастанию дат.
Все приведённые ответы хороши 😊. Вот моя реализация сортировки дат в стиле 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));
Таким образом, ваш массив будет отсортирован по убыванию дат.
Ваши данные нуждаются в корректировке. В приведенном коде порядок сортировки по дате может не работать должным образом, если даты не указаны в правильном формате. Рекомендуется использовать формат 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 может правильно распознать.
Если ваша дата имеет формат (дд/мм/гггг), то вы можете использовать следующий код для сортировки массива объектов по дате:
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);
.
Вы можете отсортировать массив объектов 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
в тернарном условии.
Сравнение двух дат в JavaScript
В чем разница между String.slice и String.substring?
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"