2013-04-08 11 views
34

Sono appena iniziato con Javascript e utilizzo della libreria Underscore. Vedo che hanno tutti i tipi di funzione di utilità, come _.contains. C'è un modo per fare questo lavoro sugli oggetti?underscore contiene (_.contains) sui tipi di oggetto

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

maggior parte degli esempi mostrano avere array semplici con stringhe o numeri in loro. Mi chiedevo cosa posso fare per usare le loro funzioni di utilità come _.contains per gli oggetti. Grazie.

risposta

58

contains richiede i valori comparabili con === che non funziona con differenti istanze di oggetti.

Ad esempio, funzionerebbe se si passasse l'oggetto esatto che si sta cercando, il che non è molto utile.

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

È possibile comunque utilizzare where o findWhere.

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

findWhere è nuovo nella sottolineatura 1.4.4 quindi se non lo avete, è possibile utilizzare where.

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

Grazie, findWhere funziona per me –

12

In realtà si desidera utilizzare _.where per questo.

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

In realtà dovresti fare 'if (_. Where (/*...*/). Length)', come '_.where' restituisce sempre un oggetto. – cmptrgeekken

+0

_.findWhere() restituisce un oggetto- _.where() restituisce un array- ma ho dimenticato un ".length" – mike

+0

yeah :) Non mi ero accorto di aver dimenticato il ".length" fino a dopo che ho risposto. Aggiornato la mia risposta – mike

Problemi correlati