[英]merge two objects in lodash
我有两个对象数组如下:
$scope.var1 = [{
"field_name": "fname",
"mapped_field": "firstName",
"position": 2
}, {
"field_name": "lname",
"mapped_field": "lastName",
"position": 1
}, {
"field_name": "email",
"mapped_field": "Email",
"position": 1
}];
$scope.final = [{
"field_name": "fname",
"mapped_field": "lastName",
"position": 2
}, {
"field_name": "lname",
"mapped_field": "firstName",
"position": 1
}];
这里我想替换最后一个,其中mapped_field与var1的mapped_field匹配,var1的剩余也合并到最后一个。
决赛应该是这样的:
$scope.final = [{
"field_name": "fname",
"mapped_field": "firstName",
"position": 2
}, {
"field_name": "lname",
"mapped_field": "lastName",
"position": 1
}, {
"field_name": "email",
"mapped_field": "Email",
"position": 1
}];
任何帮助将非常感谢。
使用lodash
函数的组合: _.forEach
和_.assign
:
_.forEach($scope.var1, function(varObject) {
//find object with the same mapped_field
var finalArrayItem = _.find($scope.final, {mapped_field: varObject.mapped_field});
if (finalArrayItem) {
//merge objects
_.assign(finalArrayItem, varObject);
} else {
$scope.final.push(varObject);
}
});
链接到jsbin
这是我想出的:
final = _.map(var1, function(item) {
return _.assign(
_.find(final, _.pick(item, 'mapped_field')) || {},
item
);
});
你在哪里使用map()来创建新的final
数组。 要映射的数组是var1
,我们为每个数组项返回一个新对象。 assign()函数用于使用var1
属性覆盖final
中的属性。
要使用它的var1
项映射当前final
项,请使用find() 。 pick()函数可以方便地构造过滤器对象。 在这里,您说要匹配mapped_field
属性。
逻辑||
对于没有匹配的情况是必要的。 例如, email
对象。 这只会将所有var1
属性复制到空对象中,然后返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.