首页 > 解决方案 > JavaScript - 从消息数组中获取天数,不包括没有消息的天数

问题描述

我正在开发一个聊天应用程序,我有一组消息,每个消息都有一个时间戳属性。我需要在至少发送 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)
 }
]

标签: javascriptarraysiteration

解决方案


您需要做的就是检查当前时间是否已被访问。如果没有,请添加分隔符。

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));

推荐阅读