js合并相同结构的对象,内容不覆盖

场景

两个结构相同的对象,要将它们具备相同key的数据合并,一般的方法会导致后面覆盖前面,所以需要特殊处理。
用一个简单的demo数据作为例子。

let obj1 = {
name: [{ text: “王妃1” }, { text: “王妃2” }],
age: [{ num: “12” }, { num: “13” }],
};
let obj2 = {
name: [{ text: “秦王3” }, { text: “秦王4” }],
age: [{ num: “45” }, { num: “46” }],
};

要转换为下面这种:

{
name: [ { text: ‘王妃1’ }, { text: ‘王妃2’ }, { text: ‘秦王3’ }, { text: ‘秦王4’ } ],
age: [ { num: ‘12’ }, { num: ‘13’ }, { num: ‘12’ }, { num: ‘46’ } ]
}

代码实现:

let obj1Keys = Object.keys(obj1);
let obj2Keys = Object.keys(obj2);
let newObj = {};
obj1Keys.forEach((item) => {
if (!newObj[item]) {
newObj[item] = [];
}
newObj[item] = newObj[item].concat(obj1[item]);
});
obj2Keys.forEach((item) => {
if (!newObj[item]) {
newObj[item] = [];
}
newObj[item] = newObj[item].concat(obj2[item]);
});
console.log(newObj)

你可能感兴趣的:(前端,javascript,前端)