javascript - 如何在 JavaScript 中连接两个具有数组属性的对象?

标签 javascript jquery underscore.js lodash

我有两个对象:

var one = {
  addedItems: [0, 1],
  removedItems: [8, 9],
  oneTwo: false,
  someStuff: {
    anotherArray: ['a', 'b']
  }
};

var two = {
  addedItems: [3, 4],
  removedItems: [6, 7],
  someStuff: {
    anotherArray: ['c', 'd']
  }
};

最后我需要合并这两个对象并得到类似这样的东西:

{
  addedItems: [0, 1, 3, 4],
  removedItems: [8, 9, 6, 7],
  oneTwo: false,
  someStuff: {
    anotherArray: ['a', 'b', 'c', 'd']
  }
}

操作应该在不同结构的对象上执行。

做到这一点的最佳方式(或可能的方式)是什么? jQuery 或 underscore/lodash 中是否有允许执行此操作的方法?

最佳答案

您是否检查了 Lodash _.mergeWith(object, sources, customizer) 方法?我认为该示例基本符合您的预期。

https://lodash.com/docs/4.17.15#mergeWith

var one = { addedItems: [0, 1], removedItems: [8, 9], oneTwo: false, someStuff: { anotherArray: ['a', 'b'] } },
    two = { addedItems: [3, 4], removedItems: [6, 7], someStuff: { anotherArray: ['c', 'd'] } };

// In case of arrays, concatenate them instead
function customizer(objValue, srcValue) {
  if (_.isArray(objValue)) {
    return objValue.concat(srcValue);
  }
}

var result = _.mergeWith(one, two, customizer);

Here's the working example in Fiddle

关于javascript - 如何在 JavaScript 中连接两个具有数组属性的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650641/

相关文章:

javascript - 合并循环与 jQuery.extend : last value is always the same?

jquery - jQuery animate 和 z-index/相对定位的问题

JQuery - 创建新的单选按钮

javascript - 如何检查继承(对象/原型(prototype))

javascript - 绝对定位时使 <div> 缩放到内容?

javascript - 在 Bower 中指定版本号

javascript - 在 Javascript 中编写分支代码的最有效方法

javascript - angularjs 中的密码检查指令

javascript - 为什么 Backbone.View 对象仍然保留在内存中?

javascript - 有没有更有效的方法来查找返回对象的子集?