JavaScript中依据关联字段合并两个项目详情对象数组
合并两个项目详情数组的解决方案
实现思路
- 先将
projectDetails2转换为以a_ID为键的Map,快速定位匹配项,避免嵌套循环的性能损耗 - 遍历
projectDetails1,每个元素通过AID在Map中查找对应项,找到则合并所有字段,未找到则保留原字段 - 筛选出
projectDetails2中未在projectDetails1匹配到的项,加入结果数组,确保无匹配项也被完整保留
代码示例(JavaScript)
// 将projectDetails2转为以a_ID为键的Map,提升查找效率 const details2Map = new Map(projectDetails2.map(item => [item.a_ID, item])); // 处理projectDetails1的匹配项,合并字段 const mergedFrom1 = projectDetails1.map(item => { const matchedItem = details2Map.get(item.AID); // 找到匹配项则合并,无匹配则保留原对象 return matchedItem ? {...item, ...matchedItem} : item; }); // 筛选projectDetails2中未匹配的项 const unmatchedFrom2 = projectDetails2.filter(item => { return !projectDetails1.some(detail1 => detail1.AID === item.a_ID); }); // 合并得到最终数组 const finalProjectDetails = [...mergedFrom1, ...unmatchedFrom2];
补充说明
- 若两个数组存在同名字段,上述代码中
projectDetails2的字段会覆盖projectDetails1的字段。若需保留projectDetails1字段优先级,可调换扩展运算符顺序:{...matchedItem, ...item} - 该方案时间复杂度为O(n+m)(n为
projectDetails1长度,m为projectDetails2长度),比嵌套循环的O(n*m)更高效,适合数据量较大的场景
内容的提问来源于stack exchange,提问作者Sun
相关产品推荐
相关产品推荐

