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

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

问题描述

我在角JS,我要合并2数组对象(重叠/组合)匹配的。

例如,阵列1是这样的:

  [
    {ID:1,名:亚当},
    {ID:2,名:史密斯},
    {ID:3,名:夏娃},
    {ID:4,名:加里},
]

阵列2是这样的:

  [
    {ID:1,名:亚当,检查:真正},
    {ID:3,名:夏娃,检查:真正},
]

我要合并,成为这个结果后的数组:

  [
    {ID:1,名:亚当,检查:真正},
    {ID:2,名:史密斯},
    {ID:3,名:夏娃,检查:真正},
    {ID:4,名:加里},
]

这可能吗?我曾尝试角的 array_merge array_extend 是这样的:

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

但是上述方法重叠在阵列的前2对象和基于匹配的数据不合并。是具有的foreach 循环这个唯一的解决办法?

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


解决方案

如果合并的这一发现是由AngularJS支持不肯定。我做了一个片断这不正是相同的:

\r
\r

函数合并(数组1,数组2){\r
    VAR IDS = [];\r
    变种merge_obj = [];\r
\r
    array1.map(功能(ELE){\r
        如果(!(ids.indexOf(ele.id)-1个)){\r
            ids.push(ele.id);\r
            merge_obj.push(ELE);\r
        }\r
    });\r
\r
    array2.map(功能(ELE){\r
    VAR指数= ids.indexOf(ele.id);\r
        如果((索引>!-1)){\r
            ids.push(ele.id);\r
            merge_obj.push(ELE);\r
        }其他{\r
        merge_obj [指数] = ELE;\r
        }\r
    });\r
\r
    的console.log(merge_obj);\r
}\r
\r
VAR数组1 = {[\r
    标识:1,\r
    名:亚当\r
},{\r
    ID:2,\r
    名:史密斯\r
},{\r
    ID:3,\r
    名:夏娃\r
},{\r
    ID:4,\r
    名:加里\r
}]\r
\r
变种数组2 = [{\r
    标识:1,\r
    名:亚当,\r
    检查:真\r
},{\r
    ID:3,\r
    名:夏娃\r
    检查:真\r
}];\r
\r
合并(数组1,数组2);

\r

\r
\r

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);

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

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