gpt4 book ai didi

javascript - 比较包含对象的两个数组

转载 作者:可可西里 更新时间:2023-11-01 02:43:13 25 4
gpt4 key购买 nike

我有两个只包含组对象的数组。一个包含我站点上的所有组。另一个包含特定用户所属的所有组。

我想减去: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})

这是其中一个数组:

分配组:

[{
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,
}];

最佳答案

我认为你应该先提取一个对象的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;

这是简化的 fiddle :http://jsfiddle.net/NLQGL/2/根据您的需要进行调整。

我认为这是一个很好的解决方案,因为您可以重用 groupsIds 对象(它似乎不会经常更改)。

注意:请随意使用 angular.forEach() 而不是 Array.prototype.forEach

关于javascript - 比较包含对象的两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21214105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com