我最近开始使用lodash,我想合并以下对象。
{
"1" : [
{
name: "karthick",
age : 25
},
{
name: "arun",
age : 20
}
],
"2" : [
{
name: "varun",
age : 25
},
{
name: "smith",
age : 20
}
]
}
{
"1" : [
{
name: "gautham",
age : 17
},
{
name: "mathan",
age : 19
}
],
"2" : [
{
name: "ashok",
age : 16
},
{
name: "dharani",
age : 20
}
]
}
{
"1" : [
{
name: "karthick",
age : 25
},
{
name: "arun",
age : 20
},
{
name: "gautham",
age : 17
},
{
name: "mathan",
age : 19
}
]
"2" : [
{
name: "varun",
age : 25
},
{
name: "smith",
age : 20
},
{
name: "ashok",
age : 16
},
{
name: "dharani",
age : 20
}
]
}
任何建议都将不胜感激
答案 0 :(得分:1)
在您可以阅读的文档中,您必须使用自定义程序函数为您查询数组。 (https://lodash.com/docs#mergeWith)
此方法如下所示:
function customizer(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
}
以下是您的示例中使用的内容:
https://jsfiddle.net/82koarwq/
如果您想更好地了解合并方法中发生的事情:
Merge将传递的第一个对象作为基础。然后循环遍历其传递的其他对象中的所有键(按参数顺序)。它做了两件事:
通过使用 mergeWith ,您有机会覆盖此行为。您可以传递用于处理第二种情况的方法。如果你想要回到默认的合并行为,你必须让你的方法返回undefined。
答案 1 :(得分:1)
尝试更新fiddle
var output = {};
var firstObjKeys = Object.keys(firstObj);
var secondObjKeys = Object.keys(secondObj).filter(function(val){
return firstObjKeys.indexOf(val) == -1;
});
var allKeys = firstObjKeys.concat(secondObjKeys);
allKeys.forEach(function(val){
var firstArr = firstObj[val] || [];
var secondArr = secondObj[val] || [];
output[val] = firstArr.concat(secondArr);
})
document.body.innerHTML += JSON.stringify(output,0,4)