如何在聊天中对消息进行分组,而不是将每个新消息都放在新部分中?

尼克

我正在使用React和socket.io构建一个聊天系统,并且试图像Discord那样实现将消息分组在一起,或者如本屏幕快照所示基本上,与其再使用头像来创建一个新部分,它只会创建一个新的message元素并将其附加到您先前存在的部分中,除非您正在与之聊天的其他用户向您发送消息该消息也是如此距您上一条消息的时间很久(在这种情况下,是1分钟)。

链接到JSFiddle。

棕色消息是我的消息,黑色消息是其他用户的消息。

我最初认为正确的解决方案是将每条消息按1分钟分组。

const sortByMinute = _.groupBy(messages, (msg) => {
    return moment(msg.createdAt * 1000).startOf("minute").format();
});

但是,如小提琴所示,这样做的问题在于,它完全忽略了其他用户何时发送消息。因此,当另一个用户向您发送消息时,它仍然认为它属于同一部分,因为它无法确定该消息是否来自新用户,并且坦率地说,我也不知道该怎么做。

我该如何实现?

约翰尼·扎巴拉

这就是我所做的:我将整个过程分为两个步骤:

  1. 按用户分组消息(您需要添加1分钟的条件)
let lastMsg = lastMessages[lastMessages.length - 1]
            if (lastMsg.user === m.user) {
        lastMessages.push(m)
        acc[acc.length - 1] = lastMessages
      } else {
        acc.push([m])
      }
      return acc;
    }, [[firstMsg]])
  1. 创建用于显示消息的数据结构。
const groups = newMessages.reduce((acc, m) => {
        const message = m[m.length - 1]
      acc[moment(message.createdAt * 1000).format()] = m
      return acc
    }, {})

检查示例:https : //jsfiddle.net/Lw8gs6x7/

注意:您需要重构我的代码。这不是很干净。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按日期对消息进行分组?

来自分类Dev

如何从mongodb的聊天对话中获取最新消息

来自分类Dev

如何按日期(节)对UITableView(聊天气泡)中的消息进行分组?

来自分类Dev

2013年展望中的“将消息编辑为新消息”

来自分类Dev

如何在线程中显示至少包含一条新消息的每条消息?

来自分类Dev

如何在javascript中向单个警报消息追加/更新消息?

来自分类Dev

根据m子数据编织器中的一个字段对消息进行分组

来自分类Dev

如何将聊天消息存储到离子存储中?

来自分类Dev

如何获取集合中每个发件人的最新消息?

来自分类Dev

如何在SQL中某个用户的每次会话中获取最新消息?

来自分类Dev

Android布局-如何在GridView中向下滑动Android中的显示更新消息

来自分类Dev

显示消息表中的最新消息,按用户分组

来自分类Dev

如何访问聊天消息中的附件

来自分类Dev

如何在IncrediBuild for Visual Studio 2012中禁用“最新消息”选项卡?

来自分类Dev

我如何在discord.js中获得最新消息?

来自分类Dev

如何在Thunderbird中禁用“来自的新消息”(在Mac mini上)

来自分类Dev

如何在Ubuntu 9.04中使Pidgin新消息通知更具攻击性?

来自分类Dev

如何在 RabbitMQ 队列中添加新消息时收到通知?

来自分类Dev

使用Django的ORM在每个消息线程中查找最新消息

来自分类Dev

如何只处理erlang队列中的最新消息?

来自分类Dev

仅当我发送新消息或刷新聊天应用程序中的页面时,才会显示旧消息

来自分类Dev

加载在JSBN中创建的RSA公钥,然后对消息进行加密

来自分类Dev

如何在不将其从服务器删除的情况下将最新消息保留在Thunderbird中?

来自分类Dev

在Outlook中更改新消息的内容

来自分类Dev

获取对话中的最新消息

来自分类Dev

如何在.bat文件中的每个命令之前显示消息?

来自分类Dev

在 iOS 聊天应用中刷新聊天消息

来自分类Dev

列出聊天的最新消息

来自分类Dev

如何在Doxygen中而不是在“模块”中对组件进行分组?

Related 相关文章

  1. 1

    如何按日期对消息进行分组?

  2. 2

    如何从mongodb的聊天对话中获取最新消息

  3. 3

    如何按日期(节)对UITableView(聊天气泡)中的消息进行分组?

  4. 4

    2013年展望中的“将消息编辑为新消息”

  5. 5

    如何在线程中显示至少包含一条新消息的每条消息?

  6. 6

    如何在javascript中向单个警报消息追加/更新消息?

  7. 7

    根据m子数据编织器中的一个字段对消息进行分组

  8. 8

    如何将聊天消息存储到离子存储中?

  9. 9

    如何获取集合中每个发件人的最新消息?

  10. 10

    如何在SQL中某个用户的每次会话中获取最新消息?

  11. 11

    Android布局-如何在GridView中向下滑动Android中的显示更新消息

  12. 12

    显示消息表中的最新消息,按用户分组

  13. 13

    如何访问聊天消息中的附件

  14. 14

    如何在IncrediBuild for Visual Studio 2012中禁用“最新消息”选项卡?

  15. 15

    我如何在discord.js中获得最新消息?

  16. 16

    如何在Thunderbird中禁用“来自的新消息”(在Mac mini上)

  17. 17

    如何在Ubuntu 9.04中使Pidgin新消息通知更具攻击性?

  18. 18

    如何在 RabbitMQ 队列中添加新消息时收到通知?

  19. 19

    使用Django的ORM在每个消息线程中查找最新消息

  20. 20

    如何只处理erlang队列中的最新消息?

  21. 21

    仅当我发送新消息或刷新聊天应用程序中的页面时,才会显示旧消息

  22. 22

    加载在JSBN中创建的RSA公钥,然后对消息进行加密

  23. 23

    如何在不将其从服务器删除的情况下将最新消息保留在Thunderbird中?

  24. 24

    在Outlook中更改新消息的内容

  25. 25

    获取对话中的最新消息

  26. 26

    如何在.bat文件中的每个命令之前显示消息?

  27. 27

    在 iOS 聊天应用中刷新聊天消息

  28. 28

    列出聊天的最新消息

  29. 29

    如何在Doxygen中而不是在“模块”中对组件进行分组?

热门标签

归档