In one of the controllers of my angular application i have a variable set as follows.
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;
});
Now $scope.xyz
looks something like
[
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 ...},
]
What i am trying to do is get an object within xyz using the id
property (not the list index). I am aware that I can iterate over the array as follows.
angular.forEach($scope.xyz, function(obj){ return obj.id == 1;});
but is there a way I can do it without looping over the list ?
No, you can't really avoid looping (O(n)
) unless there are some preconditions met.
O(log n)
).O(1)
.If those conditions are not fulfilled initially, but you need to access the items by id multiple times, it could be helpful to bring them in that form (sorting/building a hash map).
Though this is already answered a year ago, since this is one of the top results in Google, I thought I can add the following suggestion which may be the easiest way to filter. After injecting $filter into your controller,
var result = $filter('filter')($scope.xyz, {id:"1"});
©2020 All rights reserved.