Javascript 使用Lodash将最后一个树节点合并到数组中

Javascript 使用Lodash将最后一个树节点合并到数组中,javascript,arrays,object,merge,lodash,Javascript,Arrays,Object,Merge,Lodash,情景: const obj1={ a:100, b:200, c:{c1:100} } 常数obj2={ b:250, c:{c1:200}, d:{d1:{d1a:400} } 预期结果: someMergeFn(obj1、obj2) //应该返回。。。 { 答:[100], [200250],, c:{c1:[100200]}, d:{d1:{d1a:[400]} } 我的尝试低于预期,但未能接近预期结果 const obj1={ a:100, b:200, c:{c1:100} }

情景:

const obj1={
a:100,
b:200,
c:{c1:100}
}
常数obj2={
b:250,
c:{c1:200},
d:{d1:{d1a:400}
}
预期结果:

someMergeFn(obj1、obj2)
//应该返回。。。
{
答:[100],
[200250],,
c:{c1:[100200]},
d:{d1:{d1a:[400]}
}

我的尝试低于预期,但未能接近预期结果

const obj1={
a:100,
b:200,
c:{c1:100}
}
常数obj2={
b:250,
c:{c1:200},
d:{d1:{d1a:400}
}
const merged=uu.mergeWith(
obj1,
obj2,
(第一,第二)=>
Array.isArray(第一)?first.push(第二):[第一,第二]
)
console.log(合并)

使用空对象启动合并。这将防止第一个对象发生突变,并将所有值都作为空值启动,在这种情况下,我们将提供一个空数组作为
first
的默认值

只要第二个值不是对象(或数组),我们就可以假设第一个值是数组,并使用spread(或concat)将它们组合成一个新数组。如果没有,我们将返回
未定义的
,以便
..mergeWith()
将处理对象/数组的合并

const obj1={“a”:100,“b”:200,“c”:{“c1”:100}
常量obj2={“b”:250,“c”:{“c1”:200},“d”:{“d1”:{“d1a”:400}
const merged=uu.mergeWith(
{},
obj1,
obj2,
(第一,第二)=>
!|等对象(第二)?[…(第一个),第二个]:未定义
)
console.log(合并)

如果对lodash没有特别的了解,下面是使用vanilla JS的递归方法

mergeTo
方法获取要合并的
target
对象和
obj
。 通过对象条目,检查值是否为对象。 希望这有帮助

const obj1={
a:100,
b:200,
c:{c1:100}
};
常数obj2={
b:250,
c:{c1:200},
d:{d1:{d1a:400}
};
const mergeTo=(目标,对象)=>{
Object.entries(obj.forEach)([key,value])=>{
if(typeof value==“object”&&!Array.isArray(value)){
如果(!target[key]){
目标[键]={};
}
合并到(目标[键]、对象[键]);
}否则{
如果(!target[key]){
目标[键]=[];
}
目标[键]。推送(值);
}
});
};
常量输出={};
合并到(输出,obj1);
合并到(输出,obj2);
控制台日志(输出)