2013-04-08 155 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