#javascript #reactjs
#javascript #reactjs
Вопрос:
Я не могу отсортировать массив по дате. Я пробовал много разных вещей, но не смог заставить его работать. Массив состоит из объектов с last_updated
полем, которое имеет значение, отформатированное следующим образом: 24/1/2021 @ 13:21:2
.
Я попытался отсортировать массив перед выполнением .map()
:
chats.sort(function (a, b) {
return (
new Date(b.last_update) - new Date(a.last_update)
);
});
Это не работает, и я, честно говоря, не знаю почему. Это из @
-за даты?
Ответ №1:
Попробуйте это:
chats.sort(function (a, b) {
return new Date(b.last_update).getTime() - new Date(a.last_update).getTime();
});
Ответ №2:
const chats = [
{ title: 'Hiking', last_updated: new Date('2019-06-28') },
{ title: 'Shopping', last_updated: new Date('2019-06-10') },
{ title: 'Trekking', last_updated: new Date('2019-06-22') }
]
const sorted = chats.sort((a, b) => b.last_updated - a.last_updated)
console.log(sorted);
Ответ №3:
Да, это потому, что вы не можете проанализировать свою отформатированную дату с new Date
помощью . Оба 24/1/2021 @ 13:21:2
и 24/1/2021 13:21:2
возвращают недопустимую дату, если вы попытаетесь их проанализировать.
Вы можете либо обновить способ хранения этих дат, либо проанализировать дату, прежде чем пытаться их отсортировать. Если вы не можете сохранить их в другом формате (например, ISO 8601), я бы, вероятно, использовал date-fns/parse
для анализа даты пользовательский форматировщик. Смотрите пример ниже:
import parse from 'date-fns/parse'
const chats = [
{ message: 'facilis consectetur, error sequi excepturi', last_updated: '24/1/2021 @ 13:21:2' },
{ message: 'sit amet consectetur adipisicing elit', last_updated: '24/1/2021 @ 13:20:14' },
{ message: 'mollitia unde fugiat delectus sunt ducimus', last_updated: '24/1/2021 @ 13:22:4' }
]
const format = 'd/M/y @ H:m:s'
const parseDate = d => parse(d, format, new Date())
chats.sort((a, b) => parseDate(b.last_updated) - parseDate(a.last_updated))
// it returns the following array:
//
// [
// {last_updated: "24/1/2021 @ 13:22:4", message: "mollitia unde fugiat delectus sunt ducimus"},
// {last_updated: "24/1/2021 @ 13:21:2", message: "facilis consectetur, error sequi excepturi"},
// {last_updated: "24/1/2021 @ 13:20:14", message: "sit amet consectetur adipisicing elit"}
// ]