Mit lodash kann ich die Mitgliedschaft in grundlegenden Datentypen überprüfen mit includes
:
_.includes([1, 2, 3], 2)
> true
Aber folgendes funktioniert nicht:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Das verwirrt mich, weil die folgenden Methoden, die eine Sammlung durchsuchen, gut funktionieren:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Was mache ich falsch? Wie überprüfe ich die Mitgliedschaft eines Objekts in einer Sammlung mit includes
?
edit: frage war ursprünglich für lodash version 2.4.1, aktualisiert für lodash 4.0.0
javascript
functional-programming
lodash
Conrad.Dean
quelle
quelle
_.contains
wurde in lodash v4 entfernt -_.includes
stattdessen verwendencontains
Alias. Ich werde dies aktualisierenAntworten:
Die
includes
(früher alscontains
und bezeichneteinclude
) Methode vergleicht Objekte anhand von Referenzen (oder genauer gesagt mit===
). Da die beiden Objektliterale{"b": 2}
in Ihrem Beispiel unterschiedliche Instanzen darstellen, sind sie nicht gleich. Beachten:Dies funktioniert jedoch, da es nur eine Instanz von
{"b": 2}
:Auf der anderen Seite vergleichen die
where
(in Version 4 veralteten) undfind
Methoden Objekte anhand ihrer Eigenschaften, sodass sie keine Referenzgleichheit erfordern. Alternativincludes
können Siesome
Folgendes versuchen (auch als Alias bezeichnetany
):quelle
Ergänzend zur Antwort
p.s.w.g
gibt es drei weitere Möglichkeiten, dies zu erreichenlodash
4.17.5
, ohne_.includes()
:Angenommen, Sie möchten
entry
einem Array von Objektennumbers
nur dann Objekte hinzufügen , wennentry
dies noch nicht vorhanden ist.Wenn Sie a zurückgeben möchten
Boolean
, können Sie im ersten Fall den zurückgegebenen Index überprüfen:quelle