如何在javascript中合并2个对象?

时间:2015-02-24 07:58:38

标签: javascript data-structures

如何在javascript中合并2个对象?例如如果objB.a2不存在则objB.a2 = objA.a2

objA = {
  a1: 
  a2: 
  a3: 
}

objB = {
  a1:
  a3:
}
for (var k in objB) {
  if (typeof objB[k] === 'undefined') {
       // objB[k] = 
  }
}

5 个答案:

答案 0 :(得分:1)

使用jQuery,你可以这样做:

$.extend(objB, objA);

这会将objA的所有属性合并到objB。要将它们合并为一个全新的对象,请执行以下操作:

var objC = {};
$.extend(objC, objA, objB);

如果没有jQuery,你可以这样做(这会将objA的属性添加到objB):

for (var attrname in objA) { objB[attrname] = objA[attrname]; }

有关详细信息,请参阅:How can I merge properties of two JavaScript objects dynamically?

答案 1 :(得分:0)

试试这个

function merge(obj1,obj2){
    var obj3 = {}, prop;
    for (prop in obj1) {
        obj3[prop] = obj1[prop];
    }
    for (prop in obj2) {
       obj3[prop] = obj2[prop];
    }
    return obj3;
}
merge(obj1, obj2);

答案 2 :(得分:0)

您也可以使用Underscore.JS中的_.extend()方法。请参阅http://underscorejs.org/#extend

中的详细信息

它是一个小而强大的辅助函数JavaScript库。

答案 3 :(得分:0)

如果你想收到一个具有objA和objB属性的NEW对象,我想你可以使用如下函数:

objA = {
  a1: 1,
  a2: 2,
  a3: 3
}

objB = {
  a1: 4,
  a4: 5
}

function merge(objA, objB){
  var o = {};
  for (prop in objA) //copy objA props to new object
    o[prop] = objA[prop];

  for (prop in objB) { //copy objB props to new object
    if (o[prop] === undefined) //check if the property name is used already
      o[prop] = objB[prop]; // if the prop name is not used - assign it
}
  return o;
};

console.log(merge(objA, objB)); //check the result!

答案 4 :(得分:0)

使用 Object.assign spread运算符合并两个对象。

方法错误(由于定位为o1,因此修改了原始对象)

var o1 = { X: 10 };
var o2 = { Y: 20 };
var o3 = { Z: 30 };
var merge = Object.assign(o1, o2, o3);
console.log(merge)  // {X:10, Y:20, Z:30}
console.log(o1)     // {X:10, Y:20, Z:30}

正确的方法

var o1 = { X: 10 };
var o2 = { Y: 20 };
var o3 = { Z: 30 };

console.log('Does not modify original objects because target {}');
var merge = Object.assign({}, o1, o2, o3);
console.log(merge); // { X: 10, Y: 20, Z: 30 }
console.log(o1)

console.log('Does not modify original objects')
var spreadMerge = {...o1, ...o2, ...o3};
console.log(spreadMerge);
console.log(o1);