如何合并数组中相同id对象的不同属性?
合并数组中同ID对象的实现方法
实现思路
利用reduce遍历数组,以对象的id作为键将数据暂存到临时对象中,遇到相同id时合并所有属性,最后将临时对象的值转换为数组即可得到目标结果。
代码示例
原数据:
let data = [{id:1, value:10}, {id:2, value:20}, {id:1, name:'test'}];
合并逻辑:
const mergedData = Object.values(data.reduce((acc, curr) => { // 合并已有对象与当前对象属性,若无对应id则直接存入 acc[curr.id] = {...(acc[curr.id] || {}), ...curr}; return acc; }, {})); console.log(mergedData); // 输出结果:[{id:1, value:10, name:'test'}, {id:2, value:20}]
补充说明
如果存在相同id下属性名重复的情况,后出现的属性值会覆盖先出现的,这是展开运算符的默认行为。若需要自定义属性覆盖规则(比如保留先出现的值),可修改合并部分的逻辑。
内容的提问来源于stack exchange,提问作者Manash Witwicky
相关产品推荐
相关产品推荐

