How can I find the index of an object inside a Array using underscore.js?
angularjs, javascript, javascript-framework, underscore.js
Solution
Use this instead:
var array = [{'id': 1, 'name': 'xxx'},
{'id': 2, 'name': 'yyy'},
{'id': 3, 'name': 'zzz'}];
var searchValue = {'id': 1, 'name': 'xxx'},
index = -1;
_.each(array, function(data, idx) {
if (_.isEqual(data, searchValue)) {
index = idx;
return;
}
});
console.log(index); //0
In your snippet `data === searchValue` compares the objects' references, you don't want to do this. On the other hand, if you use `data == searchValue` you are going to compare objects' string representations i.e. `[Object object]` if you don't have redefined `toString` methods.
So the correct way to compare the objects is to use `_.isEqual`.
Problem
I want to get the index of the given value inside a Array using underscore.js. Here is my case ``` var array = [{'id': 1, 'name': 'xxx'}, {'id': 2, 'name': 'yyy'}, {'id': 3, 'name': 'zzz'}]; var searchValue = {'id': 1, 'name': 'xxx'}; ``` I used the following code, ``` var index = _.indexOf(array, function(data) { alert(data.toSource()); //For testing purpose return data === searchValue; }); ``` Also tried this too ``` var index = _.indexOf(array, {id: searchValue.id}); ``` But it `returns -1` . Since it does not enter into that function. So I didn't get that alert message. Whats wrong with my code. Can anyone help me?