La comparaison de deux tableaux qui contiennent des objets
J'ai deux tableaux qui contiennent uniquement des objets pour les groupes. L'un contient tous les groupes sur mon site. L'autre contient tous les groupes d'un utilisateur spécifique appartient.
Je voudrais soustraire: All the groups
- user groups
= groups remaining
Je suis en utilisant AngularJS, je ne sais pas si ça peut aider ici ou pas (peut-être un filtre peut être utilisé).
J'ai regardé questions précédentes et suis tombé sur quelques options:
Ce sont celles que j'ai essayé:
$scope.availableGroups = $($scope.groups).not($scope.assignedGroups).get();
$scope.availableGroups = $.grep($scope.groups,function(x) {return $.inArray(x, $scope.assignedGroups) < 0})
C'est l'un des tableaux:
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,
}];
OriginalL'auteur Batman | 2014-01-19
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devriez extraire les id d'un objet, d'abord, puis de comparer deux objets. Par exemple:
Va ici simplifié de violon: http://jsfiddle.net/NLQGL/2/
L'ajuster à vos besoins.
Je pense que c'est une bonne solution car vous pourriez réutiliser le
groupsIds
objet (il ne semble pas à changer souvent).Note: n'hésitez pas à utiliser
angular.forEach()
au lieu deArray.prototype.forEach
Je pense que votre commentaire est un tout autre problème. Je n'ai aucune idée de ce que SPServices est et comment pourrais-je tester et de déboguer. Mais je suis sûr que assignedGroups dans votre code n'est pas défini. C'est peut-être un problème de délimitation de l'étendue?
Oui, vous avez raison. Il fonctionne donc c'est bien. Merci.
OriginalL'auteur Michał Miszczyszyn
Vous pouvez utiliser une combinaison de Angular JS est
$filter
service et Lo-dash estfindWhere
méthode pour obtenir des objets uniques dans les deux tableaux, essayez ceci :OU
En utilisant uniquement Angular JS
OriginalL'auteur Ajay Ullal
Vous pouvez essayer ce
Résultat
Json Diff
Voir édité répondre
Ne pense pas que ça marche: jsfiddle.net/u9xES/443
OriginalL'auteur Prateek
Si vous souhaitez filtrer tous les groupes, un filtre est la bonne décision:
Ici est la Violon.
Pour la documentation de prendre un loog au MDN Tableau.le prototype.filtre
Pour une solution d'avenir avec
find
oufindIndex
prendre un coup d'oeil à cette bel article.Edit: Pour traiter les
Objects
vous pouvez facilement adapter la fonction de filtre et utiliser un comparateur de fonction au lieuindexOf
. Voici un autre Violon pour ce cas.J'ai ajouté un Violon pour ce cas.
Vous répondez est le seul qui fonctionne réellement. Je suis juste un moment difficile à comprendre. Je vais jeter un oeil à la documentation de demain, qui pourrait vous aider. Merci.
J'ai essayé votre solution mais édité les groupes à réfléchir comment mes données sont modélisées. Il ne fonctionne pas malheureusement. jsfiddle.net/UDaUG/6
Vous l'avez fait mal
OriginalL'auteur Thomas Junk