Better way to find object in array instead of looping?

arrays, javascript, jquery, object

Solution

jQuery `$.grep` (or other filtering function) is not the optimal solution.

The `$.grep` function will loop through all the elements of the array, even if the searched object has been already found during the loop.

From jQuery grep documentation :

The $.grep() method removes items from an array as necessary so that all remaining items pass a provided test. The test is a function that is passed an array item and the index of the item within the array. Only if the test returns true will the item be in the result array.

Provided that your array is not sorted, nothing can beat this:

var getObjectByName = function(name, array) {

    // (!) Cache the array length in a variable
    for (var i = 0, len = test.length; i < len; i++) {

        if (test[i].name === name)
            return test[i]; // Return as soon as the object is found

    }

    return null; // The searched object was not found

}

Problem

Example Link: http://jsfiddle.net/ewBGt/ ``` var test = [{ "name": "John Doo" }, { "name": "Foo Bar" }] var find = 'John Doo' console.log(test.indexOf(find)) // output: -1 console.log(test[find]) // output: undefined $.each(test, function(index, object) { if(test[index].name === find) console.log(test[index]) // problem: this way is slow }) ``` Problem In the above example I have an array with objects. I need to find the object that has `name = 'John Doo'` My `.each` loop is working, but this part will be executed 100 times and test will contain lot more objects. So I think this way will be slow. The `indexOf()` won't work because I cannot search for the name in object. Question How can I search for the object with `name = 'John Doo'` in my current array?

Original source

Related problems