在 Angular Javascript 中合并组合匹配对象的数组 [英] Merge Arrays Combining Matching Objects in Angular Javascript

查看:25
本文介绍了在 Angular Javascript 中合并组合匹配对象的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Angular JS 中有 2 个数组对象,我希望合并(重叠/组合)匹配的对象.

例如数组 1 是这样的:

<预><代码>[{"id":1,"name":"Adam"},{"id":2,"name":"Smith"},{"id":3,"name":"Eve"},{"id":4,"name":"Gary"},]

数组 2 是这样的:

<预><代码>[{"id":1,"name":"Adam", "checked":true},{"id":3,"name":"Eve", "checked":true},]

我希望合并后的结果数组变成这样:

<预><代码>[{"id":1,"name":"Adam", "checked":true},{"id":2,"name":"Smith"},{"id":3,"name":"Eve", "checked":true},{"id":4,"name":"Gary"},]

这可能吗?我已经尝试过 angular 的 array_mergearray_extend 像这样:

angular.merge([], $scope.array1, $scope.array2);angular.extend([], $scope.array1, $scope.array2);

但是上面的方法重叠了数组中的前2个对象,并且不会根据匹配的数据合并它们.有一个 foreach 循环是唯一的解决方案吗?

有人可以在这里指导我吗?

解决方案

不确定 AngularJS 是否支持此合并查找.我做了一个完全相同的片段:

function merge(array1, array2) {变量 ID = [];var merge_obj = [];array1.map(function(ele) {如果 (!(ids.indexOf(ele.id) > -1)) {ids.push(ele.id);merge_obj.push(ele);}});array2.map(function(ele) {var index = ids.indexOf(ele.id);如果 (!( 索引 > -1)) {ids.push(ele.id);merge_obj.push(ele);}别的{合并对象[索引] = ele;}});console.log(merge_obj);}var array1 = [{身份证":1,"name": "亚当"}, {身份证":2,姓名":史密斯"}, {身份证":3,名称":夏娃"}, {身份证":4,姓名":加里"}, ]var array2 = [{身份证":1,"name": "亚当",检查":真}, {身份证":3,"name": "夏娃",检查":真}, ];合并(数组1,数组2);

I have 2 array objects in Angular JS that I wish to merge (overlap/combine) the matching ones.

For example, the Array 1 is like this:

[
    {"id":1,"name":"Adam"},
    {"id":2,"name":"Smith"},
    {"id":3,"name":"Eve"},
    {"id":4,"name":"Gary"},
]

Array 2 is like this:

[
    {"id":1,"name":"Adam", "checked":true},
    {"id":3,"name":"Eve", "checked":true},
]

I want the resulting array after merging to become this:

[
    {"id":1,"name":"Adam", "checked":true},
    {"id":2,"name":"Smith"},
    {"id":3,"name":"Eve", "checked":true},
    {"id":4,"name":"Gary"},
]

Is that possible? I have tried angular's array_merge and array_extend like this:

angular.merge([], $scope.array1, $scope.array2);
angular.extend([], $scope.array1, $scope.array2);

But the above method overlap the first 2 objects in array and doesn't merge them based on matching data. Is having a foreach loop the only solution for this?

Can someone guide me here please?

解决方案

Not sure if this find of merge is supported by AngularJS. I've made a snippet which does exactly the same:

function merge(array1, array2) {
    var ids = [];
    var merge_obj = [];

    array1.map(function(ele) {
        if (!(ids.indexOf(ele.id) > -1)) {
            ids.push(ele.id);
            merge_obj.push(ele);
        }
    });

    array2.map(function(ele) {
    	var index = ids.indexOf(ele.id);
        if (!( index > -1)) {
            ids.push(ele.id);
            merge_obj.push(ele);
        }else{
        	merge_obj[index] = ele;
        }
    });

    console.log(merge_obj);
}

var array1 = [{
    "id": 1,
    "name": "Adam"
}, {
    "id": 2,
    "name": "Smith"
}, {
    "id": 3,
    "name": "Eve"
}, {
    "id": 4,
    "name": "Gary"
}, ]

var array2 = [{
    "id": 1,
    "name": "Adam",
    "checked": true
}, {
    "id": 3,
    "name": "Eve",
    "checked": true
}, ];

merge(array1, array2);

这篇关于在 Angular Javascript 中合并组合匹配对象的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆