Bat*_*man 10 javascript arrays jquery angularjs
我有两个数组,只包含组的对象.一个包含我网站上的所有组.另一个包含特定用户所属的所有组.
我想减去:All the groups- user groups =groups remaining
我正在使用AngularJS,我不确定这里是否有帮助(可能会使用过滤器).
我查看了之前的问题并遇到了一些选择:
这些是我试过的:
$scope.availableGroups = $($scope.groups).not($scope.assignedGroups).get();
$scope.availableGroups = $.grep($scope.groups,function(x) {return $.inArray(x, $scope.assignedGroups) < 0})
Run Code Online (Sandbox Code Playgroud)
这是一个数组:
assignedGroups:
[{
id: 115,
name: 'Test Group 2',
Description: '',
owner: 10,
OwnerIsUser: false,
}, {
id: 116,
name: 'Test Group 3',
Description: '',
owner: 71,
OwnerIsUser: false,
}, {
id: 117,
name: 'Test Group 4',
Description: '',
owner: 71,
OwnerIsUser: false,
}, {
id: 118,
name: 'Test Group 5',
Description: '',
owner: 115,
OwnerIsUser: false,
}, {
id: 119,
name: 'Test Group 6',
Description: '',
owner: 8,
OwnerIsUser: true,
}];
Run Code Online (Sandbox Code Playgroud)
我认为你应该首先将id提取到一个对象然后比较两个对象.例如:
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;
Run Code Online (Sandbox Code Playgroud)
这里简化了小提琴:http://jsfiddle.net/NLQGL/2/ 根据您的需要调整它.
我认为这是一个很好的解决方案,因为你可以重用该groupsIds对象(它似乎不经常改变).
注意:请随意使用angular.forEach()而不是Array.prototype.forEach
| 归档时间: |
|
| 查看次数: |
18184 次 |
| 最近记录: |