JavaScript - Получить дни из массива сообщений, исключая дни без сообщений - PullRequest
0 голосов
/ 12 марта 2020

Я работаю над приложением чата, и у меня есть массив сообщений, каждое из которых имеет свойство timestamp. Мне нужно получить все дни в массиве, куда отправляется хотя бы 1 сообщение, как в WhatsApp. Идея состоит в том, чтобы отобразить разделитель между сообщениями в разные дни, причем разделитель находится непосредственно перед первым сообщением указанного дня.

Например, если массив сообщений был

[
 {
  message: "Hey",
  timestamp: (1st January 2020)
 },
 {
  message: "Hi",
  timestamp: (1st January 2020)
 },
 {
  message: "Hello",
  timestamp: (3rd January 2020)
 },
]

Тогда ожидаемый результат будет

[(1st January 2020), (3rd January 2020)]

или даже лучше

[
 {
  type: "Seperator",
  day: (1st January 2020)
 },
 {
  message: "Hey",
  timestamp: (1st January 2020)
 },
 {
  message: "Hi",
  timestamp: (1st January 2020)
 },
 {
  type: "Seperator",
  day: (3rd January 2020)
 },
 {
  message: "Hello",
  timestamp: (3rd January 2020)
 }
]

1 Ответ

1 голос
/ 12 марта 2020

Все, что вам нужно сделать, это проверить, было ли посещено текущее время. Если это не так, добавьте разделитель.

let timestamps = [
 {
  message: "Hey",
  timestamp: '1st January 2020'
 },
 {
  message: "Hi",
  timestamp: '1st January 2020'
 },
 {
  message: "Hello",
  timestamp: '3rd January 2020'
 },
];

const separateTimestamps = ary => {
  let splitTimes = new Array();
  let timestamp;
  for (let i=0; i<ary.length; i++) {
    if (timestamp != ary[i].timestamp) {
      timestamp = ary[i].timestamp;
      splitTimes.push({
        type: 'Seperator',
        timestamp: timestamp
      });
    }

    splitTimes.push(ary[i]);
  }

  return splitTimes;
}


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