lodash pozwala mi sprawdzić przynależność do podstawowych typów danych z includes
:
_.includes([1, 2, 3], 2)
> true
Ale to nie działa:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
To mnie dezorientuje, ponieważ następujące metody przeszukiwania kolekcji wydają się dobrze działać:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Co ja robię źle? Jak sprawdzić przynależność obiektu do kolekcji za pomocą includes
?
edycja: pytanie było pierwotnie dla lodash w wersji 2.4.1, zaktualizowane dla lodash 4.0.0
javascript
functional-programming
lodash
Conrad Dean
źródło
źródło
_.contains
został usunięty w lodash v4 - użyj_.includes
zamiast tegocontains
alias. Zaktualizuję toOdpowiedzi:
Metoda
includes
(wcześniej nazywanacontains
iinclude
) porównuje obiekty przez odniesienie (a dokładniej z===
). Ponieważ dwa literały obiektu{"b": 2}
w przykładzie reprezentują różne wystąpienia, nie są równe. Ogłoszenie:Jednak to zadziała, ponieważ istnieje tylko jedno wystąpienie
{"b": 2}
:Z drugiej strony
where
(przestarzałe w wersji 4) ifind
metody porównują obiekty według ich właściwości, więc nie wymagają równości odwołań. Alternatywnieincludes
możesz spróbowaćsome
(również z aliasem jakoany
):źródło
Uzupełniając odpowiedź
p.s.w.g
, oto trzy inne sposoby osiągnięcia tego za pomocąlodash
4.17.5
, bez użycia_.includes()
:Powiedzmy, że chcesz dodać obiekt
entry
do tablicy obiektównumbers
, tylko jeśli jeszczeentry
nie istnieje.Jeśli chcesz zwrócić a
Boolean
, w pierwszym przypadku możesz sprawdzić zwracany indeks:źródło