在JavaScript中,合并两个对象并保留它们的子项可以通过多种方式实现。以下是一些常见的方法:
Object.assign()
方法可以将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。
const obj1 = { a: 1, b: { c: 3 } };
const obj2 = { b: { d: 4 }, e: 5 };
const mergedObj = Object.assign({}, obj1, obj2);
console.log(mergedObj); // { a: 1, b: { d: 4 }, e: 5 }
注意:这种方法会覆盖相同键的值,不会深度合并嵌套对象。
展开运算符可以用于合并对象,但同样不会深度合并嵌套对象。
const obj1 = { a: 1, b: { c: 3 } };
const obj2 = { b: { d: 4 }, e: 5 };
const mergedObj = { ...obj1, ...obj2 };
console.log(mergedObj); // { a: 1, b: { d: 4 }, e: 5 }
如果需要深度合并嵌套对象,可以使用递归函数来实现。
function deepMerge(target, ...sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
deepMerge(target[key], source[key]);
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return deepMerge(target, ...sources);
}
function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
const obj1 = { a: 1, b: { c: 3 } };
const obj2 = { b: { d: 4 }, e: 5 };
const mergedObj = deepMerge({}, obj1, obj2);
console.log(mergedObj); // { a: 1, b: { c: 3, d: 4 }, e: 5 }
通过这些方法和注意事项,可以有效地合并两个对象并保留它们的子项。
领取专属 10元无门槛券
手把手带您无忧上云