合并 Object 的几种基本方法
在开发过程中,我们经常会遇到合并对象的需求,今天我们就来了解一下合并对象的几种基本方法。
Object.assign()
Object.assign()
方法可以将一个或多个源对象的属性复制到目标对象中。如果源对象有自己的属性,那么它们的值将被保留。
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
Object.assign()
是浅拷贝,如果源对象中有值的引用,合并后在目标对象中修改值引用,同时会修改源对象的值引用。
const o1 = { a: 1 };
const o2 = { b: {
name: "b"
} };
const obj = Object.assign({}, o1, o2);
obj.b.name = "new_b";
console.log(o2.b); // {name: 'new_b'}
解构赋值
使用解构赋值可以将对象的属性复制到一个新的对象中。
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const obj = { ...o1, ...o2 };
console.log(obj); // {a: 1, b: 2, c: 2}
可以看出,使用结构赋值合并对象时,后面对象的属性值会覆盖前面已有属性值。
使用递归方法
我们可以通过递归的方法将对象中的嵌套对象合并到一个新的对象中。
/** @format */
function mergeObjects(obj1, obj2) {
const mergedObj = Object.assign({}, obj1, obj2);
// 递归处理嵌套对象
Object.keys(mergedObj).forEach((key) => {
if (typeof mergedObj[key] === "object" && obj1[key] && obj2[key]) {
mergedObj[key] = mergeObjects(obj1[key], obj2[key]);
}
});
return mergedObj;
}
const obj1 = { a: 1, b: { c: 2, d: 3, e: { name: "e" } } };
const obj2 = { a: 2, b: { c: 3, d: 4, e: { age: 18 } } };
const mergedObj = mergeObjects(obj1, obj2);
console.log(mergedObj);
// {a:2,b:{c:3,d:4,e:{name:e,age:18}}}
总结
以上介绍的是合并对象的三种基本操作,它们也只是简化了合并对象的步骤,在具体使用的时候,需要根据场景判断哪种最合适。
转载自:https://juejin.cn/post/7272264903443791931