You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js 如何将含sender和message的对象数组按sender分组重组

实现方案

使用Array.prototype.reduce可以高效简洁完成需求,时间复杂度仅为O(n),核心逻辑只有2行:

const originalArr = [
    { "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(originalArr.reduce((acc, cur) => {
    acc[cur.sender] ??= { sender: cur.sender, messages: [] };
    acc[cur.sender].messages.push(cur.message);
    return acc;
}, {}));

逻辑说明

  • 先通过reduce遍历原数组,以sender为key生成临时映射对象,避免多次遍历查找分组
  • 最后调用Object.values()直接提取映射对象的值,即可得到目标结构的数组
  • 若需要兼容不支持空值合并运算符??=的低版本环境,可将对应行替换为if (!acc[cur.sender]) acc[cur.sender] = { sender: cur.sender, messages: [] };

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:54:03