【发布时间】:2021-11-11 14:33:11
【问题描述】:
我有两个具有下一个结构的对象:
let sourceObj = [
{
items: [
{ items: [{ id: '0', name: 'z' }], name: 'm' },
{ items: [{ id: '2', name: 'q' }], name: 'l' },
],
name: 'c'
},
{
items: [
{ items: [{ id: '4', name: '-' }], name: 'v' },
],
name: 'd'
}
];
let targetObj = [
{
items: [
{ items: [{ id: '1', name: 'd' }], name: 'm' },
{ items: [{ id: '3', name: 'b' }], name: 'j' },
],
name: 'c'
}
];
我想合并这个对象以获得一个具有下一个结构的对象:
let merged = [
{
items: [
{ items: [
{ id: '0', name: 'd' },
{ id: '1', name: 'z' }],
name: 'm'
},
{ items: [{ id: '2', name: 'q' }], name: 'l' },
{ items: [{ id: '3', name: 'b' }], name: 'j' },
],
name: 'c'
},
{
items: [
{ items: [{ id: '4', name: '-' }], name: 'v' },
],
name: 'd'
}
]
也就是我要获取的对象,如果源数组的名字和目标数组的名字相同的话,这个对象已经加入了数组。
我尝试使用 lodash 方法 mergeWith,但我只能加入集合的上层项目...
mergeWith(sourceObj, targetObj, (objValue, srcValue) => {
if (isArray(objValue)) {
return objValue.concat(srcValue);
}
});
【问题讨论】:
-
如果
targetObject = [{ id: "9", name: "c"}]怎么办?预期的输出是什么? -
不可能。最顶层是
[{ items: [{ id: "9", name: "c"}], name: "-"}]
标签: javascript arrays reactjs algorithm array-merge