lodash memungkinkan saya memeriksa keanggotaan tipe data dasar dengan includes
:
_.includes([1, 2, 3], 2)
> true
Tetapi yang berikut ini tidak berfungsi:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Ini membingungkan saya karena metode berikut yang mencari melalui koleksi tampaknya baik-baik saja:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Apa yang saya lakukan salah? Bagaimana cara saya memeriksa keanggotaan suatu objek dalam koleksi includes
?
sunting: pertanyaan pada awalnya untuk untuk lodash versi 2.4.1, diperbarui untuk lodash 4.0.0
javascript
functional-programming
lodash
Conrad.Dean
sumber
sumber
_.contains
telah dihapus di lodash v4 - gunakan_.includes
sajacontains
alias. Saya akan memperbarui iniJawaban:
Metode
includes
(sebelumnya disebutcontains
daninclude
) membandingkan objek dengan referensi (atau lebih tepatnya, dengan===
). Karena dua objek literal{"b": 2}
dalam contoh Anda mewakili contoh yang berbeda , mereka tidak sama. Memperhatikan:Namun, ini akan berhasil karena hanya ada satu contoh dari
{"b": 2}
:Di sisi lain, metode
where
(usang dalam v4) danfind
metode membandingkan objek dengan properti mereka, sehingga mereka tidak memerlukan persamaan referensi. Sebagai alternatifincludes
, Anda mungkin ingin mencobasome
(juga aliasany
):sumber
Melengkapi jawaban dengan
p.s.w.g
, berikut adalah tiga cara lain untuk mencapai ini menggunakanlodash
4.17.5
, tanpa menggunakan_.includes()
:Katakanlah Anda ingin menambahkan objek
entry
ke array objeknumbers
, hanya jikaentry
belum ada.Jika Anda ingin mengembalikan
Boolean
, dalam kasus pertama, Anda dapat memeriksa indeks yang dikembalikan:sumber