let a = { name: 'aaa', line: { show: false, color: 'red' } }; let b = { id: 2, line: { show: true, name: 'bbb' } }; function $deepObjectMerge(firstObject, secondObject) { for (var key in secondObject) { firstObject[key] = firstObject[key] && Object.prototype.toString.call(firstObject[key]) === "[object Object]" ? $deepObjectMerge(firstObject[key], secondObject[key]) : secondObject[key]; } return firstObject; }; console.log(a, b, $deepObjectMerge(a, b));
结果如下
{
"name": "aaa",
"line": {
"show": true,
"color": "red",
"name": "bbb"
},
"id": 2
}
TS版本
type Obj = Record<string | number | symbol, any>
export function deepObjectMerge(firstObject:Obj, secondObject:Obj) {
for (let key in secondObject) {
firstObject[key] = firstObject[key] && Object.prototype.toString.call(firstObject[key]) === "[object Object]" ?
deepObjectMerge(firstObject[key], secondObject[key]) : secondObject[key];
}
return firstObject;
}