代码:
/**
* @description 对象属性合并,并返回一个新对象,与 Object.assign 语法不同
* @param target
* @param source
* @returns {{}}
*/
const configDeepMerge = (target, source) => {
const merged = {}
for (const each in source) {
if (target.hasOwnProperty(each) && source.hasOwnProperty(each)) {
if (
typeof target[each] === 'object' &&
typeof source[each] === 'object'
) {
merged[each] = configDeepMerge(target[each], source[each])
} else {
merged[each] = source[each]
}
} else if (source.hasOwnProperty(each)) {
merged[each] = source[each]
}
}
for (const eachTarget in target) {
if (!(eachTarget in source) && target.hasOwnProperty(eachTarget)) {
merged[eachTarget] = target[eachTarget]
}
}
return merged
}
测试:
let a = {
name: 'Joyce Lee',
age: 18
}
let b = {
firstName: "Joyce",
lastName: "Lee",
age: 20
}
console.log(configDeepMerge(a, b))
// {"firstName": "Joyce", "lastName": "Lee", "age": 20, "name": "Joyce Lee"}