Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并两个对象并在冲突时覆盖值_Javascript_Underscore.js - Fatal编程技术网

Javascript 合并两个对象并在冲突时覆盖值

Javascript 合并两个对象并在冲突时覆盖值,javascript,underscore.js,Javascript,Underscore.js,我正在尝试合并两个对象并覆盖过程中的值 是否可以使用执行以下操作?(我不喜欢使用下划线,我只是希望它简单) 这一个将b合并为a: 甚至: Object.prototype.myMerge = function(b) { for(var idx in b) { this[idx] = b[idx]; } //done! }; a.myMerge(b); //a is merged 此函数返回一个合并对象: function merge(a, b) {

我正在尝试合并两个对象并覆盖过程中的值

是否可以使用执行以下操作?(我不喜欢使用下划线,我只是希望它简单)

这一个将b合并为a:

甚至:

Object.prototype.myMerge = function(b) {
    for(var idx in b) {
        this[idx] = b[idx];
    } //done!
};

a.myMerge(b); //a is merged

此函数返回一个合并对象:

function merge(a, b) {
    var c = {};
    for(var idx in a) {
        c[idx] = a[idx];
    }
    for(var idx in b) {
        c[idx] = b[idx];
    }
    return c;
}

var c = merge(a, b);
使用:


第一个参数已修改,因此如果不想修改
obj1
obj2
,只需传入
{}

,就可以使用
Object.assign()
,这是内部语言结构:

const o1 = {a: 1, b: 1, c:1};
const o2 = {b:5};
const o3 = Object.assign({}, o1, o2);
结果:

o1: {a: 1, b: 1, c:1};
o2: {b: 5};
o3: {a: 1, b: 5, c:1};
已更新

使用ES6您可以通过使用spread做得更漂亮:

const o3 = {...o1, ...o2}
您将创建新对象,其中o1中的属性与o2中的属性合并,并从o2中更新冲突属性名称。
这种构造也不需要任何额外的lib或模块。

在ES6或Typescript中使用对象扩展

也可以将一个对象扩展到另一个对象中。一个常见的用例是,只需将属性添加到对象中,而不改变原始属性:

const point2D = {x: 1, y: 2};
/** Create a new object by using all the point2D props along with z */
const point3D = {...point2D, z: 3};
对于对象,排列顺序很重要。它的工作原理类似于Object.assign,并实现了您所期望的:首先出现的内容将被随后出现的内容“覆盖”:

const point2D = {x: 1, y: 2};
const anotherPoint3D = {x: 5, z: 4, ...point2D};
console.log(anotherPoint3D); // {x: 1, y: 2, z: 4}
const yetAnotherPoint3D = {...point2D, x: 5, z: 4}
console.log(yetAnotherPoint3D); // {x: 5, y: 2, z: 4}

该死,出于某种原因,我认为这对我不起作用@马修:这应该是一个答案,答案是可以接受的。@dotancohen不,今天正确的答案是:const obj3={…obj1,…obj2}如果你愿意,你可以使用jQuery:
const o3 = {...o1, ...o2}
const point2D = {x: 1, y: 2};
/** Create a new object by using all the point2D props along with z */
const point3D = {...point2D, z: 3};
const point2D = {x: 1, y: 2};
const anotherPoint3D = {x: 5, z: 4, ...point2D};
console.log(anotherPoint3D); // {x: 1, y: 2, z: 4}
const yetAnotherPoint3D = {...point2D, x: 5, z: 4}
console.log(yetAnotherPoint3D); // {x: 5, y: 2, z: 4}