Javascript 将Lodash与嵌套对象合并使用

Javascript 将Lodash与嵌套对象合并使用,javascript,merge,lodash,Javascript,Merge,Lodash,我有两个这样的物体: const object1 = {first: [{a: 0, b:3}], second: [{a: 1, b:2}], third: [{a: 3, b:2}]} const object2 = {first: [{a: 1, b:0}], second: [{a: 10, b:0}], third: [{a: 2, b:3}]} 我想要这两个物体的总和: const res = {first: [{a: 1, b:3}], second: [{a: 11, b:2}

我有两个这样的物体:

const object1 = {first: [{a: 0, b:3}], second: [{a: 1, b:2}], third: [{a: 3, b:2}]}
const object2 = {first: [{a: 1, b:0}], second: [{a: 10, b:0}], third: [{a: 2, b:3}]}
我想要这两个物体的总和:

const res = {first: [{a: 1, b:3}], second: [{a: 11, b:2}], third: [{a: 5, b:5}]}
我尝试以这种方式使用Lodash的mergeWith:

const res = mergeWith({}, object1, object2, add)
但我得到:

{first: NaN, second: NaN, third: NaN}

如何将mergeWith与嵌套对象一起使用?

定义如何添加对象实现了以下技巧:

const res = mergeWith(object1, object2, (objValue, srcValue) =>
    [{
        a: objValue[0].a + srcValue[0].a,
        b: objValue[0].b + srcValue[0].b
    }]
)
进行此操作时,您需要通过自定义程序。Lodash然后对值进行递归合并

诀窍在于,如果自定义程序返回
undefined
,则使用
merge
组合值。但是,由于
add
为不兼容的值返回
NaN
,因此将使用该值-因此,如果您只有一个类似于
add
的函数,但返回
undefined
而不是
NaN
,那么
mergeWith
将为您完成所有繁重的工作:

constobject1={first:[{a:0,b:3}],second:[{a:1,b:2}],third:[{a:3,b:2}]}
const object2={first:[{a:1,b:0}],second:[{a:10,b:0}],third:[{a:2,b:3}]}
const res=389;.mergeWith({},object1,object2,customizer)
控制台日志(res);
功能自定义程序(a、b){
//您仍然可以使用add
常量结果=uu.add(a,b);
//忽略NaN值并返回未定义的值
如果(u.isNaN(result)){
返回;
}
//仅合并可以合并的值
返回结果;
}

添加功能在做什么?我明白了,是洛达沙的添加功能。我没有意识到你是单独导入函数的。在这种情况下,它将不起作用,因为它会尝试将一个数组添加到另一个数组中,从而导致
NaN
,正如您所看到的那样。@vlaz好的,有什么要解决的提示吗?数组中总是有一个对象吗?我指的是
第一个:[{a:0,b:3}]
-如果数组中有两个条目,那么合并逻辑可能会更复杂。或者,如果您希望合并匹配索引,则可能不会。