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
.