【问题标题】:NodeJS Restructure Array of Objects [duplicate]NodeJS重组对象数组[重复]
【发布时间】:2021-10-20 04:31:12
【问题描述】:

我有以下数据 - 对象数组 它是一个发件人 ID 和一条消息

[
    {
        "sender": "1000000000",
        "message": message 1"
    }, 
    {
        "sender": "1000000000",
        "message": "message 2"
    },
    {
        "sender": "1000000001",
        "message": "message 3"
    }, 
    {
        "sender": "1000000002",
        "message": "message 4"
    },
    {
        "sender": "1000000002",
        "message": "message 5"
    }, 
    {
        "sender": "1000000002",
        "message": "message 6"
    }
]

我想创建一个新的对象数组,其结构如下。因此,消息按发件人分组。它将有助于显示数据。

[
    {
        "sender": "1000000000",
        "messages": [
              "message 1",
              "message 2",
         ]
    },
    {
        "sender": "1000000001",
        "messages": [
              "messages 3"
        ]
    }, 
    {
        "sender": "1000000002",
        "messages": [
              "message 4",
              "message 5",
              "message 6"
        ]
    }
]

我一直在玩 .map() 和 .filter() - 但我还有很长的路要走。

我也尝试过 for 循环等,我可能能够开始工作,但它们很丑。

有什么简单的改变结构的方法吗?

谢谢!

【问题讨论】:

标签: javascript node.js arrays dictionary filter


【解决方案1】:

您可以使用Array.reduce() 将您的消息按发件人分组:

const data = [ { "sender": "1000000000", "message": "message 1" }, { "sender": "1000000000", "message": "message 2" }, { "sender": "1000000001", "message": "message 3" }, { "sender": "1000000002", "message": "message 4" }, { "sender": "1000000002", "message": "message 5" }, { "sender": "1000000002", "message": "message 6" } ] 
const result = Object.values(data.reduce((acc, cur) => { 
    acc[cur.sender] = acc[cur.sender] || { sender: cur.sender, messages: []};
    acc[cur.sender].messages.push(cur.message);
    return acc;
}, {}));

console.log("Result:", result);
        

【讨论】:

  • 请不要再添加另一个 "group by" 答案。这个主题已经有数百个类似的问题和非常好的答案......
  • 你说得对,安德烈亚斯...点了。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 2020-07-26
  • 2021-10-21
相关资源
最近更新 更多