繁体   English   中英

在lodash中合并两个对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM