Сортировать объекты по времени - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу отсортировать эти массивы объектов от самых ранних до самых поздних по времени. (Противоположно тому, что есть сейчас, т.е. старые сообщения должны появляться сверху массива). Я знаю, что мы можем использовать Date.parse для преобразования дат в миллисекунды, а затем мы можем использовать функцию function sortBy(a, b) { return a - b; } для их сортировки.

Но у меня возникли проблемы при объединении всего этого.

Вот данные:

const messagesArray = [
  {id: "92196bd0-b326-4b04-9520-1e8e4814f5e4", message: "ghghhghg", message_time: "2020-03-11T12:50:15.473Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}, 
  {id: "c5a35080-8f5b-49f7-8216-d6b94e543c44", message: "gghhghgh", message_time: "2020-03-11T12:50:13.103Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "2046cdda-47cd-492f-8534-a58fe5f5091f", message: "dffffffffffffff", message_time: "2020-03-11T12:47:45.598Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "649534f7-34d6-45ae-98b2-ac1189cf9337", message: "ddfffffffff", message_time: "2020-03-11T12:47:44.105Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}
];

Ответы [ 4 ]

1 голос
/ 09 апреля 2020

Пока ваши даты

  • в ISO 8601 формат
  • все тот же часовой пояс

Вы можете использовать обычная лексикографическая (строковая) сортировка здесь. Это безопасно, поскольку даты в формате ISO 8601 всегда go от самых значительных к наименьшим, поэтому сортировка их в алфавитном порядке c будет всегда , чтобы получить возрастающие даты. Или обратный алфавит c для нисходящих дат:

const messagesArray = [
  {id: "92196bd0-b326-4b04-9520-1e8e4814f5e4", message: "ghghhghg", message_time: "2020-03-11T12:50:15.473Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}, 
  {id: "c5a35080-8f5b-49f7-8216-d6b94e543c44", message: "gghhghgh", message_time: "2020-03-11T12:50:13.103Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "2046cdda-47cd-492f-8534-a58fe5f5091f", message: "dffffffffffffff", message_time: "2020-03-11T12:47:45.598Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "649534f7-34d6-45ae-98b2-ac1189cf9337", message: "ddfffffffff", message_time: "2020-03-11T12:47:44.105Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}
];

messagesArray.sort((a, b) => a.message_time.localeCompare(b.message_time));

console.log(messagesArray)

Если вы уже сортируете их напротив того, что хотите, вы можете просто использовать Array#reverse:

const messagesArray = [
  {id: "92196bd0-b326-4b04-9520-1e8e4814f5e4", message: "ghghhghg", message_time: "2020-03-11T12:50:15.473Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}, 
  {id: "c5a35080-8f5b-49f7-8216-d6b94e543c44", message: "gghhghgh", message_time: "2020-03-11T12:50:13.103Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "2046cdda-47cd-492f-8534-a58fe5f5091f", message: "dffffffffffffff", message_time: "2020-03-11T12:47:45.598Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "649534f7-34d6-45ae-98b2-ac1189cf9337", message: "ddfffffffff", message_time: "2020-03-11T12:47:44.105Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}
];

messagesArray.reverse();

console.log(messagesArray)
1 голос
/ 09 апреля 2020

Это должно работать:

const messagesArray = [
  {id: "92196bd0-b326-4b04-9520-1e8e4814f5e4", message: "ghghhghg", message_time: "2020-03-11T12:50:15.473Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}, 
  {id: "c5a35080-8f5b-49f7-8216-d6b94e543c44", message: "gghhghgh", message_time: "2020-03-11T12:50:13.103Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "2046cdda-47cd-492f-8534-a58fe5f5091f", message: "dffffffffffffff", message_time: "2020-03-11T12:47:45.598Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "649534f7-34d6-45ae-98b2-ac1189cf9337", message: "ddfffffffff", message_time: "2020-03-11T12:47:44.105Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}
];
var sortedByDate = messagesArray.sort(function(a,b) { 
  return new Date(a.message_time).getTime() - new Date(b.message_time).getTime() 
});
console.log(sortedByDate);
1 голос
/ 09 апреля 2020

Чтобы отсортировать объекты по времени, сначала нужно преобразовать строки в объекты времени (которые могут быть сопоставимы):

const messagesArray = [
  {id: "92196bd0-b326-4b04-9520-1e8e4814f5e4", message: "ghghhghg", message_time: "2020-03-11T12:50:15.473Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}, 
  {id: "c5a35080-8f5b-49f7-8216-d6b94e543c44", message: "gghhghgh", message_time: "2020-03-11T12:50:13.103Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "2046cdda-47cd-492f-8534-a58fe5f5091f", message: "dffffffffffffff", message_time: "2020-03-11T12:47:45.598Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null},
  {id: "649534f7-34d6-45ae-98b2-ac1189cf9337", message: "ddfffffffff", message_time: "2020-03-11T12:47:44.105Z", interaction_id: "08350527-770e-42eb-ad3c-33a73250bc20", post_user_ref: null}
];

messagesArray.sort((a, b) => {return new Date(a.message_time) - new Date(b.message_time)});
console.log(messagesArray);
0 голосов
/ 09 апреля 2020

Поскольку они уже отсортированы в обратном порядке, если вы читаете массив с конца, я думаю, это тоже будет хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...