Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
35
rated 0 times [  39] [ 4]  / answers: 1 / hits: 19249  / 11 Years ago, tue, april 2, 2013, 12:00:00

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?


More From » jquery

 Answers
9

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

}

[#79160] Monday, April 1, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
cruzs

Total Points: 710
Total Questions: 113
Total Answers: 100

Location: Nepal
Member since Sat, Jul 18, 2020
4 Years ago
cruzs questions
Thu, Nov 26, 20, 00:00, 4 Years ago
Wed, Oct 28, 20, 00:00, 4 Years ago
Wed, Aug 19, 20, 00:00, 4 Years ago
Sun, Aug 2, 20, 00:00, 4 Years ago
;