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
相关产品推荐
相关产品推荐

