Mis*_*esh 4 javascript arrays collections lodash
我有两个对象数组。
arr1 = [
{
myName: 'Adam',
mySkill: 'CSS',
},
{
myName: 'Mutalib',
mySkill: 'JavaScript',
},
];
arr2 = [
{
myName: 'Adam',
myWeight: '112',
},
{
myName: 'Habib',
myWeight: '221',
},
];
Run Code Online (Sandbox Code Playgroud)
我想要的结果是一个数组,其中包含第一个数组的对象,这些对象在第二个数组中具有匹配的属性“myName”,以及相应的第二个数组对象的附加属性。
result = [
{
myName = 'Adam'
mySkill = 'CSS'
myWeight = '112'
}
];
Run Code Online (Sandbox Code Playgroud)
下面的解决方案组的级联阵列(arr1和arr2通过)myName,将删除只包含使用一个项目的所有组拒绝,最后使用地图来合并所得到的数组。
var result = _(arr1)
.concat(arr2)
.groupBy('myName')
.reject({ length: 1 })
.map(_.spread(_.merge))
.value();
Run Code Online (Sandbox Code Playgroud)
var result = _(arr1)
.concat(arr2)
.groupBy('myName')
.reject({ length: 1 })
.map(_.spread(_.merge))
.value();
Run Code Online (Sandbox Code Playgroud)
var arr1 = [
{
myName: 'Adam',
mySkill: 'CSS',
},
{
myName: 'Mutalib',
mySkill: 'JavaScript',
}
];
var arr2 = [
{
myName: 'Adam',
myWeight: '112',
},
{
myName: 'Habib',
myWeight: '221',
}
];
var result = _(arr1)
.concat(arr2)
.groupBy('myName')
.reject({ length: 1 })
.map(_.spread(_.merge))
.value();
console.log(result);Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用intersectionWith获取两个数组之间的交集并同时分配缺失值。请注意使用cloneDeep来促进不变性。
var result = _.intersectionWith(_.cloneDeep(arr1), arr2, function(x, y) {
return x.myName === y.myName && _.assign(x, y);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>Run Code Online (Sandbox Code Playgroud)
var result = _.intersectionWith(_.cloneDeep(arr1), arr2, function(x, y) {
return x.myName === y.myName && _.assign(x, y);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5477 次 |
| 最近记录: |