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