TSR*_*TSR 2 javascript json object
我有两个这样的对象:
var a = {prop:{a:'1'}}
var b = {prop:{b:'1'}}
Run Code Online (Sandbox Code Playgroud)
我想使用 Object.assign 合并两个对象。我试过这个:
var c = Object.assign(a,b)
> {prop:{b:'1'}}
Run Code Online (Sandbox Code Playgroud)
我如何获得此输出:
{prop:{a:'1',b:'1'}}
Run Code Online (Sandbox Code Playgroud)
简而言之,我想对每个子对象进行对象分配 =>(如果存在财产,请首先检查儿童,如果它是对象,请勿覆盖)
您可以对对象的每个级别使用深度合并功能。
该函数deepMerge用作给定目标的单个函数或用作 的回调Array#reduce,其中迭代对象数组并提供一个空对象作为startvalue减少。
函数/回调本身有两个参数,一个用于目标对象,另一个用于获取和迭代所有条目的源对象。
检查对象的值,如果类型是对象,则deepMerge使用新的目标属性(如果没有给出)或对现有属性进行递归调用。
如果值不是对象,则target使用给定的键分配值。
结果是一个具有给定对象所有属性的新对象。
function deepMerge(target, source) {
Object.entries(source).forEach(([key, value]) => {
if (value && typeof value === 'object') {
deepMerge(target[key] = target[key] || {}, value);
return;
}
target[key] = value;
});
return target;
}
var a = { prop: { a: '1' } },
b = { prop: { b: '1' } },
c = [a, b].reduce(deepMerge, {});
console.log(c);Run Code Online (Sandbox Code Playgroud)