如何使用Javascript/Node.js合并两个同关联值数组为统一JSON
实现方案
这里提供两种常用方案,可根据你的实际场景选择:
方案1:高性能一一对应合并(适用于两个数组name完全匹配的场景,时间复杂度O(n))
先将第二个数组转为以name为键的映射结构,查找效率更高,避免嵌套循环:
// 假设第一个数组为arr1,第二个数组为arr2 // 先构造name到anzahl的映射 const countMap = new Map(arr2.map(item => [item.name, item.anzahl])) // 遍历第一个数组合并属性 const mergedArray = arr1.map(item => ({ ...item, anzahl: countMap.get(item.name) }))
方案2:全量双向合并(适用于两个数组存在对方没有的name的场景,会保留所有name条目)
如果两个数组可能存在一方有某个name、另一方没有的情况,可以先收集所有name值再统一合并:
// 收集两个数组所有的name值去重 const allNameSet = new Set([...arr1.map(i => i.name), ...arr2.map(i => i.name)]) // 遍历所有name合并两个数组的属性 const mergedArray = Array.from(allNameSet).map(name => { const arr1Item = arr1.find(i => i.name === name) ?? {} const arr2Item = arr2.find(i => i.name === name) ?? {} return { ...arr1Item, ...arr2Item } })
你给出的示例场景直接用方案1即可,得到的结果完全符合你给出的预期结构。
内容的提问来源于stack exchange,提问作者Feyza Keles
相关产品推荐
相关产品推荐

