Как отсортировать даты по моменту в массиве по убыванию - PullRequest
0 голосов
/ 28 декабря 2018

Попытка сделать нумерацию страниц,

У меня есть массив, подобный приведенному ниже, поэтому

https://drive.google.com/open?id=1iNsIKZs8IyZbm8M1N77PAkTjqSqFugKo

В массиве создается объект At со временем при создании, отформатированный с помощьюmoment.js

, который я хочу отсортировать в порядке убывания, чтобы новые сообщения появлялись первыми

postActions.js

firestore
  .collection("posts")
  .add({
    ...post,
    authorFirstName: profile.firstName,
    authorLastName: profile.lastName,
    authorId: authorId,
    createdAt: new Date()
  })

postReducer.js

case STORE_POSTS_SUCCESS:
  const snapshot = action.payload;
  const array = [];
  snapshot.forEach(doc => {
    //  console.log(doc);
    //  console.log(doc.id);
    array.push({
      id: doc.id,
      authorId: doc.data().authorId,
      authorFirstName: doc.data().authorFirstName,
      authorLastName: doc.data().authorLastName,
      title: doc.data().title,
      content: doc.data().content,
      createdAt: moment(doc.data().createdAt.toDate()).format(
        "MMMM Do YYYY, h:mm:ss a"
      )
    });
  });

  console.log(array);
  return {
    ...state,
    //  posts: array.slice(0)
    posts: array
  };

1 Ответ

0 голосов
/ 28 декабря 2018

То, как вы форматируете дату с моментом, на самом деле очень плохо для сортировки.Эта строка не сортируется естественным образом в хронологическом порядке.

Если вы хотите отсортировать записи по дате, вам гораздо лучше просто сохранить целочисленное значение даты в этот момент времени.Целые числа очень легко сортировать.Типичный способ хранения времени в базе данных Realtime - использование миллисекунд с начала эпохи Unix, что довольно универсально для современных операционных систем.В JavaScript вы можете получить текущее время с Date.now().Это настоятельно рекомендуется по сравнению с большинством других форм представления даты.

...