我有一个像这样的相同对象的数组。我想将它们合并到一个对象中,因为只有原始值将被“堆叠”到一个数组中,而对象将被遍历并且数组将被连接。
我更喜欢功能性的解决方案(我可以通过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方法足以使我困惑。目前我被困住了...
答案 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>