Node.js中如何按指定键值合并数组内的多个JSON对象
Node.js 实现按name字段合并对象数组
你可以通过Map结构做分组聚合,遍历过程中完成属性合并,最终转换为数组得到结果,示例代码如下:
// 原始对象数组 const originArr = [ { name: "abc", class: "12" }, { name: "abc", Roll: "12" }, { name: "def", class: "10" }, { name: "def", Roll: "15" } ]; // 初始化Map存储分组数据,key为name值,value为合并后的对象 const mergeMap = new Map(); for (const item of originArr) { if (mergeMap.has(item.name)) { // 已存在对应name的条目,合并新属性 mergeMap.set(item.name, { ...mergeMap.get(item.name), ...item }); } else { // 不存在则新增条目 mergeMap.set(item.name, { ...item }); } } // 转换Map的值为数组,得到最终结果 const result = Array.from(mergeMap.values()); console.log(result);
你也可以用Array.reduce方法写为更简洁的版本:
const result = Array.from( originArr.reduce((acc, cur) => acc.set(cur.name, { ...acc.get(cur.name) || {}, ...cur }), new Map()).values() );
提示:如果相同name的对象存在同名字段,后出现的对象的字段值会覆盖先出现的,符合通用合并逻辑,若有特殊需求可自行调整合并顺序。
内容的提问来源于stack exchange,提问作者Md. Rony Ahmed
相关产品推荐
相关产品推荐

