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

_.containsha sido eliminado en lodash v4 - usar_.includesen su lugarcontainsalias. Actualizaré estoRespuestas:
El método
includes(anteriormente llamadocontainsyinclude) 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 losfindmé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 usandolodash4.17.5, sin usar_.includes():Supongamos que desea agregar un objeto
entrya una matriz de objetosnumbers, solo sientryaún no existe.Si desea devolver a
Boolean, en el primer caso, puede verificar el índice que se devuelve:fuente