嵌套对象分配Javascript [英] Nested object assign Javascript

查看:86
本文介绍了嵌套对象分配Javascript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个这样的对象:

var a = {prop:{a:'1'}}
var b = {prop:{b:'1'}}

我想使用Object.assign合并两个对象.我试过了:

I want to merge the two objects using Object.assign. I tried this:

var c = Object.assign(a,b)
> {prop:{b:'1'}}

如何获得此输出:

{prop:{a:'1',b:'1'}}

简而言之,我想在每个子对象上分配对象=>(如果存在属性,请首先检查儿童,如果不能,则不要覆盖)

In short, I want to do Object assign on every sub Objects => (IF PROPERTY EXISTS, CHECK CHILDREN FIRST IF IT AS OBJECT, DO NOT OVERIDE)

推荐答案

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

You could use a deep merge function for every level of the object.

函数deepMerge可以用作给定目标的单个函数,也可以用作

The function deepMerge works as single function for a given target or as callback for Array#reduce, where an array of objects is iterated and an empty object is supplied as startvalue for reducing.

函数/回调本身具有两个参数,一个用于目标对象,一个用于源对象,在其中获取并迭代所有条目.

The function/callback itselft has two parameters, one for the target object and one for the source object where all entries are taken and iterated.

检查对象的值,如果类型是对象,则使用新的目标属性(如果未提供)或对退出属性进行递归调用deepMerge.

A value of the object is checked and if the type is an object, then a recursive call of deepMerge is done with a a new target property, if not given or to an exitent property.

如果该值不是对象,则使用给定的键将该值分配给target.

If the value is not an object, the value is assigned to target with the given key.

结果是具有给定对象所有属性的新对象.

The result is a new object with all properties of the given objects.

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);

这篇关于嵌套对象分配Javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆