2013-04-08 113 views
34

我刚刚开始使用Javascript并使用Underscore库。我发现他们有各种各样的效用函数,比如_.contains。有没有办法使这个工作对象?下划线包含(_.contains)对象类型

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"); 
} 

大多数的他们表现出与他们中的字符串或数字简单数组的例子。我想知道如何使用_.contains这样的实用函数来做对象。谢谢。

回答

58

contains要求值具有可比性与===,不会使用对象的不同实例工作。

例如,如果你传递了你正在搜索的确切对象,这是不会有用的。

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

但是,您可以使用wherefindWhere

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

findWhere是新的下划线1.4.4所以如果你没有它,你可以使用where

if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) { 
+0

谢谢,findWhere为我工作 – 2016-09-07 21:02:28

12

你实际上想为此使用_.where

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'}, {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ]; 

if (_.where(indexes, {'id':1, 'name': 'jake'}).length) { 
    console.log("contains"); 
} 
+0

你会真正需要做的'如果(_。其中(/*...*/)。长度)','因为总是_.where'返回一个对象。 – cmptrgeekken 2013-04-08 01:03:43

+0

_.findWhere()返回一个对象 - _.where()返回一个数组 - 但我确实忘记了一个“.length” – mike 2013-04-08 01:06:04

+0

是的:)我没有意识到我忘了“.length”,直到我回答完之后。更新我的回答 – mike 2013-04-08 01:10:47