Dans l'un des contrôleurs de mon application angulaire, j'ai un ensemble de variables comme suit.
SomeService.get({}, function(data){ // this sets xyz as the list of the data retrieved // from the resource within the controllers scope $scope.xyz = data.objects; });
Maintenant, $scope.xyz
ressemble à quelque chose
[ 0: {id: 1, ...more data here ...}, 1: {id: 2, ...more data here ...}, 2: {id: 3, ...more data here ...}, 3: {id: 4, ...more data here ...}, 4: {id: 5, ...more data here ...}, 5: {id: 6, ...more data here ...}, ]
Ce que j'essaie de faire, c'est obtenir un objet dans xyz à l'aide de la propriété id
(pas l'index de la liste). Je suis conscient que je peux itérer sur le tableau comme suit.
angular.forEach($scope.xyz, function(obj){ return obj.id == 1;});
Mais y at-il une façon de le faire sans boucler la liste?
Non, vous ne pouvez pas vraiment éviter de boucler ( O(n)
) à moins qu'il n'y ait certaines conditions préalables.
O(log n)
). O(1)
. Si ces conditions ne sont pas remplies initialement, mais vous devez accéder aux éléments par identifiant à plusieurs reprises, il pourrait être utile de les mettre dans cette forme (tri / création d'une carte de hash).
Bien que cela soit déjà répondu il y a un an, puisqu'il s'agit de l'un des meilleurs résultats de Google, j'ai pensé pouvoir ajouter la suggestion suivante, qui peut être le moyen le plus simple de filtrer. Après avoir injecté $ filter dans votre contrôleur,
var result = $filter('filter')($scope.xyz, {id:"1"});