lodash me permite verificar la membresía de los tipos de datos básicos con includes
:
_.includes([1, 2, 3], 2)
> true
Pero lo siguiente no funciona:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Esto me confunde porque los siguientes métodos que buscan en una colección parecen funcionar bien:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
¿Qué estoy haciendo mal? ¿Cómo verifico la pertenencia de un objeto en una colección includes
?
editar: la pregunta era originalmente para lodash versión 2.4.1, actualizada para lodash 4.0.0
javascript
functional-programming
lodash
Conrad.Dean
fuente
fuente
_.contains
ha sido eliminado en lodash v4 - usar_.includes
en su lugarcontains
alias. Actualizaré estoRespuestas:
El método
includes
(anteriormente llamadocontains
yinclude
) compara objetos por referencia (o más precisamente, con===
). Debido a que los dos literales de objeto{"b": 2}
en su ejemplo representan instancias diferentes , no son iguales. Aviso:Sin embargo, esto funcionará porque solo hay una instancia de
{"b": 2}
:Por otro lado, el
where
(en desuso en v4) y losfind
métodos comparan objetos por sus propiedades, por lo que no requieren igualdad de referencia. Como alternativa aincludes
, es posible que desee probarsome
(también alias comoany
):fuente
Complementando la respuesta con
p.s.w.g
, aquí hay otras tres formas de lograr esto usandolodash
4.17.5
, sin usar_.includes()
:Supongamos que desea agregar un objeto
entry
a una matriz de objetosnumbers
, solo sientry
aún no existe.Si desea devolver a
Boolean
, en el primer caso, puede verificar el índice que se devuelve:fuente