best way to get a specific object from and array without looping

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 ?

Answers:

Answer

No, you can't really avoid looping (O(n)) unless there are some preconditions met.

  • If the array is sorted by id, you can use a binary search algorithm (O(log n)).
  • If the array index always corresponds to the id-1 (or some similar simple formula), you can directly access it in 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).

Answer

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"});

reference: https://docs.angularjs.org/api/ng/filter/filter

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us Javascript

©2020 All rights reserved.