如何合并对象 - lodash?
How to merge object - lodash?
我最近开始使用lodash,我想合并以下对象。
对象:
var firstObj =
{
"1" : [
{
name: "karthick",
age : 25
},
{
name: "arun",
age : 20
}
],
"2" : [
{
name: "varun",
age : 25
},
{
name: "smith",
age : 20
}
]
}
var secondObj =
{
"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
}
]
}
我尝试过的:
如有建议将不胜感激
在您可以阅读的文档中,您必须使用自定义程序函数来为您连接数组。 (https://lodash.com/docs#mergeWith)
此方法如下所示:
function customizer(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
}
这是您的示例中使用的:
https://jsfiddle.net/82koarwq/
如果您想更好地了解合并方法内部发生的事情:
Merge 以传递给它的第一个对象为基础。然后循环遍历传递给它的其他对象中的所有键(按参数顺序)。它做了两件事:
- 如果第一个对象不包含键,它添加键及其值。
- 如果第一个对象已经包含键,它将覆盖它的值。
通过使用 mergeWith,您有机会改写此行为。您可以传递一个用于处理第二种情况的方法。如果你想回到默认的合并行为,你必须让你的方法 return 未定义。
试试这个更新后的 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)
我最近开始使用lodash,我想合并以下对象。
对象:
var firstObj =
{
"1" : [
{
name: "karthick",
age : 25
},
{
name: "arun",
age : 20
}
],
"2" : [
{
name: "varun",
age : 25
},
{
name: "smith",
age : 20
}
]
}
var secondObj =
{
"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
}
]
}
我尝试过的:
如有建议将不胜感激
在您可以阅读的文档中,您必须使用自定义程序函数来为您连接数组。 (https://lodash.com/docs#mergeWith)
此方法如下所示:
function customizer(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
}
这是您的示例中使用的:
https://jsfiddle.net/82koarwq/
如果您想更好地了解合并方法内部发生的事情:
Merge 以传递给它的第一个对象为基础。然后循环遍历传递给它的其他对象中的所有键(按参数顺序)。它做了两件事:
- 如果第一个对象不包含键,它添加键及其值。
- 如果第一个对象已经包含键,它将覆盖它的值。
通过使用 mergeWith,您有机会改写此行为。您可以传递一个用于处理第二种情况的方法。如果你想回到默认的合并行为,你必须让你的方法 return 未定义。
试试这个更新后的 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)