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

angularjs, javascript

Solution

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).

Problem

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 ?

Original source

Related problems