你如何合并两个JavaScript对象

时间:2018-01-16 17:53:57

标签: javascript json node.js underscore.js

我有一个像这样的对象

let ob1 = {
'item_data':{
  'stack':{
    'purchase':'12345',
    'order':'22222'
   }
  }
}

和另一个像这样的对象

let ob2 = {
  'stack':{
    'purchase':'444444'
   }
 }

结果对象应如下所示

result = {
  'item_data':{
    'stack':{
      'purchase':'444444',
      'order':'22222'
     }
   }
 }

代码位于nodejs应用程序中。我想知道是否有任何javascript库在服务器端js中进行这种合并/替换对象。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

有很多npm包可以实现这一目标,但非常受欢迎的是lodash.merge

看看lodash合并功能: https://lodash.com/docs/4.17.4#merge

  

这个方法就像_.assign,除了它递归地合并自己和   继承源对象的可枚举字符串键控属性   目标对象。解析为未定义的源属性   如果存在目标值,则跳过。数组和普通对象   属性以递归方式合并。其他对象和值类型是   被任务覆盖。源对象从左到右应用   对。后续资源会覆盖之前的属性分配   源。

一个例子:

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }

使用lodash.merge npm包引入此方法: https://www.npmjs.com/package/lodash.merge

祝你好运!

答案 1 :(得分:0)

这就是你想要的。

let ob1 = {
'item_data':{
  'stack':{
    'purchase':'12345',
    'order':'22222'
   }
  }
}
// and another object like this

let ob2 = {
  'stack':{
    'purchase':'444444'
   }
 }
Object.assign(ob1.item_data.stack, ob2.stack);
console.log(ob1);

答案 2 :(得分:0)

试试这个:

function merge(a, b) {
    for (var key in b) {
        if (exports.merge.call(b, key) && b[key]) {
            if ('object' === typeof (b[key])) {
                if ('undefined' === typeof (a[key])) a[key] = {};
                exports.merge(a[key], b[key]);
            } else {
                a[key] = b[key];
            }
        }
    }
    return a;
}
merge(obj1, obj2);