在 Angular Javascript 中合并组合匹配对象的数组 [英] Merge Arrays Combining Matching Objects in 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_merge
和 array_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屋!