Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

underscore contains (_.contains) on object types

I'm just getting started with Javascript and using the Underscore library. I see they have all sorts of utility function, like _.contains. Is there a way to make this work on objects?

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];  if (_.contains(indexes, {'id':1, 'name': 'jake'})) {     console.log("contains"); } 

Most of the examples they show have simple arrays with strings or numbers in them. I was wondering what I can do to use their utility functions like _.contains for objects. Thanks.

like image 585
Crystal Avatar asked Apr 08 '13 00:04

Crystal


1 Answers

contains requires the values to be comparable with === which will not work with different instances of objects.

For instance it would work if you passed the exact object you are searching for, which isn't very useful.

if (_.contains(indexes, indexes[0])) { 

You can however use where or findWhere.

if (_.findWhere(indexes, {'id':1, 'name': 'jake'})) { 

findWhere is new in Underscore 1.4.4 so if you do not have it, you can use where.

if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) { 
like image 70
loganfsmyth Avatar answered Oct 04 '22 16:10

loganfsmyth