假设我有两个对象:
第一
[
{
id: "123",
title: "123",
options: []
},
{
id: "456",
title: "456",
options: [
{
id: "0123",
title: "0123",
options: []
}
]
},
{
id: "789",
title: "789",
options: []
},
]
和第二
[
{
id: "123",
title: "123",
options: []
},
{
id: "789",
title: "789",
options: []
},
]
你可以在第二个数组中看到我错过了这个部分:
{ id:“456”, 标题:“456”, 选项:[ { id:“0123”, 标题:“0123”, 选项:[] } ] }
如何在角度中迭代并找到缺少的元素是正确的和更好的?
答案 0 :(得分:5)
你可以这样做
<div ng-app>
<div ng-controller="MyCtrl">{{availableGroups}}
</div>
</div>
js code
function MyCtrl ($scope) {
$scope.groups = [
{
id: "123",
title: "123",
options: []
},
{
id: "456",
title: "456",
options: [
{
id: "0123",
title: "0123",
options: []
}
]
},
{
id: "789",
title: "789",
options: []
},
];
$scope.assignedGroups = [
{
id: "123",
title: "123",
options: []
},
{
id: "789",
title: "789",
options: []
},
];
$scope.availableGroups = (function () {
var assignedGroupsIds = {};
var groupsIds = {};
var result = [];
$scope.assignedGroups.forEach(function (el, i) {
assignedGroupsIds[el.id] = $scope.assignedGroups[i];
});
$scope.groups.forEach(function (el, i) {
groupsIds[el.id] = $scope.groups[i];
});
for (var i in groupsIds) {
if (!assignedGroupsIds.hasOwnProperty(i)) {
result.push(groupsIds[i]);
}
}
return result;
}());
}
这是有效的jsFiddle
由于
答案 1 :(得分:1)
假设第一个数组名为first
,第二个数组名为second
。现在先对它们进行排序:
function comp(a, b){
if(a.id < b.id) return -1;
if(a.id > b.id) return 1;
return 0;
}
first.sort(comp);
second.sort(comp);
然后迭代它们以找到缺失的元素:
var missing = {};
for(var i = 0, j = 0; i < first.length; ++i){
if(first[i].id == second[j].id){
j++;
continue;
}
missing.push(first[i]);
}
missing
数组现在包含第一个数组但不包含第二个数组的对象。
请注意,我没有使用AngularJS;这是简单的Javascript。