【问题标题】:JavaScript - Get days from array of messages excluding days with no messagesJavaScript - 从消息数组中获取天数,不包括没有消息的天数
【发布时间】:2020-03-11 21:35:54
【问题描述】:

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

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: javascript arrays iteration


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复,不幸的是,此代码在每条消息之间添加了一个分隔符。你能检查一下功能吗?谢谢
  • 代码在每个新的时间戳之间添加一个分隔符。尝试在 chrome 控制台中运行它。为简单起见,时间戳已转换为字符串。
  • 哦,我知道它现在是如何工作的了。我该如何调整它以便我可以在几秒钟内输入时间戳?我需要使用new Date(seconds).getDay() 之类的东西吗?
  • 我通过将秒输入转换为像30/12/20这样的短日期格式来让它工作
  • 关闭,但如果您的时间戳跨越几个月(例如 1/9 和 2/9),这将不起作用。您需要编写一个单独的函数来从您的时间戳中提取yyyy/mm/dd
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 2017-03-19
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多