// 判断是否是普通对象 export function isPlainObject(val: any): val is Object { return toString.call(val) === '[object Object]' }
合并逻辑
function deepMerge(...objs: any[]): any { const result = Object.create(null) objs.forEach(obj => { if (obj) { Object.keys(obj).forEach(key => { const val = obj[key] if (isPlainObject(val)) { // 这里判断 原对象上 相同键是否是一个 对象 // 如果是将 新的对象合并到原对象上 (递归) if (isPlainObject(result[key])) { result[key] = deepMerge(result[key], val) } else { result[key] = deepMerge(val) } } else { result[key] = val } }) } }) return result } let newObj = deepMerge( { a: 1, b: 2, c: { a: 3, d: 4 } }, { b: 5, c: { e: 11, f: 22 } } ); console.log(newObj);