web-dev-qa-db-fra.com

le trait de soulignement contient (_.contains) sur les types d'objet

Je commence tout juste avec Javascript et j'utilise la bibliothèque Underscore. Je vois qu'ils ont toutes sortes de fonctions utilitaires, comme _.contains. Existe-t-il un moyen de faire fonctionner cela sur des objets?

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

La plupart des exemples qu'ils montrent contiennent des tableaux simples contenant des chaînes ou des nombres. Je me demandais ce que je pouvais faire pour utiliser leurs fonctions utilitaires comme _.contains pour les objets. Merci.

39
Crystal

contains nécessite que les valeurs soient comparables à === qui ne fonctionnera pas avec différentes instances d'objets.

Par exemple, cela fonctionnerait si vous passiez l'objet exact que vous recherchez, ce qui n'est pas très utile.

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

Vous pouvez cependant utiliser where ou findWhere.

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

findWhere est nouveau dans Underscore 1.4.4 donc si vous ne l'avez pas, vous pouvez utiliser where.

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

Vous voudriez en fait utiliser _. Où pour cela.

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