嵌套对象分配 Javascript

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)

简而言之,我想对每个子对象进行对象分配 =>(如果存在财产,请首先检查儿童,如果它是对象,请勿覆盖)

Nin*_*olz 8

您可以对对象的每个级别使用深度合并功能。

该函数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)