lodash me permet de vérifier l'appartenance aux types de données de base avec includes
:
_.includes([1, 2, 3], 2)
> true
Mais ce qui suit ne fonctionne pas:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Cela me trouble car les méthodes suivantes qui recherchent dans une collection semblent très bien fonctionner:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Qu'est-ce que je fais mal? Comment vérifier l'appartenance d'un objet dans une collection avec includes
?
edit: la question était à l'origine pour lodash version 2.4.1, mise à jour pour lodash 4.0.0
javascript
functional-programming
lodash
Conrad.Dean
la source
la source
_.contains
a été supprimé dans lodash v4 - à utiliser à la_.includes
placecontains
alias. Je vais mettre à jour ceciRéponses:
La méthode
includes
(anciennement appeléecontains
andinclude
) compare les objets par référence (ou plus précisément avec===
). Étant donné que les deux littéraux d'objet de{"b": 2}
dans votre exemple représentent des instances différentes , ils ne sont pas égaux. Remarquer:Cependant, cela fonctionnera car il n'y a qu'une seule instance de
{"b": 2}
:D'autre part, les méthodes
where
(obsolète dans la v4) et lesfind
méthodes comparent les objets par leurs propriétés, de sorte qu'elles ne nécessitent pas d'égalité de référence. Au lieu de celaincludes
, vous pouvez essayersome
(également aliaséany
):la source
Pour compléter la réponse
p.s.w.g
, voici trois autres moyens d'y parvenir en utilisantlodash
4.17.5
, sans utiliser_.includes()
:Supposons que vous souhaitiez ajouter un objet
entry
à un tableau d'objetsnumbers
, uniquement s'ilentry
n'existe pas déjà.Si vous souhaitez renvoyer un
Boolean
, dans le premier cas, vous pouvez vérifier l'index qui est renvoyé:la source