合并两个对象而不覆盖 [英] Merge two objects without override

查看:420
本文介绍了合并两个对象而不覆盖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类似的defaultObject:

I have a defaultObject like that:

var default = {
    abc: "123",
    def: "456",
    ghi: {
       jkl: "789",
       mno: "012"
    }
};

我还有另外一个:

var values = {
    abc: "zzz",
    ghi: {
       jkl: "yyy",
    }
};

如何将这2个对象与以下结果合并(无覆盖)?

How can I merge those 2 objects with the following result (no override)?

var values = {
    abc: "zzz",
    def: "456",
    ghi: {
       jkl: "yyy",
       mno: "012"
    }
};

(我不想更改默认对象!)

(I don't want to change the default object!)

推荐答案

现在所有现代浏览器都支持ES2015,原生 Object.assign 可用于扩展对象

With ES2015 now being supported in all modern browsers, the native Object.assign can be used to extend objects

Object.assign({}, _default, values)

Object.assign

请注意默认是保留关键字,并且可以不能用作变量名称

Note that default is a reserved keyword, and can't be used as a variable name

原始答案,写于2013年:

The original answer, written in 2013 :

由于这是用jQuery标记的,你可以使用 $ .extend 对于简单的跨浏览器解决方案

Since this is tagged with jQuery, you could use $.extend for a simple cross-browser solution

var temp = {};
$.extend(true, temp, _default, values);
values = temp;

这篇关于合并两个对象而不覆盖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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