lodash-如何合并相同的对象并将其原始值压入各自的数组

时间:2018-08-23 21:00:45

标签: javascript functional-programming underscore.js lodash

我有一个像这样的相同对象的数组。我想将它们合并到一个对象中,因为只有原始值将被“堆叠”到一个数组中,而对象将被遍历并且数组将被连接。

我更喜欢功能性的解决方案(我可以通过for循环来很好地管理...)

const x = [
  {
    a: 1,
    b: 'hi',
    c: { d: 1 },
    e:[1,2]
  },
  {
    a: 2,
    b: 'there',
    c: { d: 2 },
    e:[3,4]
  }
];

const result = {
  a:[1,2],
  b:['hi','there'],
  c:{
    d:[1,2]
  },
  e:[1,2,3,4]
}

无论如何,暗示使用/链接哪种lodash方法足以使我困惑。目前我被困住了...

1 个答案:

答案 0 :(得分:2)

_.mergeWith()与定制器方法一起使用以处理数组的串联和基元。由于_.mergeWith()是递归的,因此它将处理嵌套对象。

const x = [{"a":1,"b":"hi","c":{"d":1},"e":[1,2]},{"a":2,"b":"there","c":{"d":2},"e":[3,4]}];

const result = _.mergeWith({}, ...x, (ov, sv) => {
  if(Array.isArray(ov)) return ov.concat(sv);
  
  if(ov !== undefined && !_.isObject(ov)) return [ov, sv];
});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>