O lodash permite verificar a associação de tipos de dados básicos com includes
:
_.includes([1, 2, 3], 2)
> true
Mas o seguinte não funciona:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Isso me confunde, porque os seguintes métodos que pesquisam em uma coleção parecem bem:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
O que estou fazendo de errado? Como verifico a associação de um objeto em uma coleção includes
?
edit: a pergunta foi originalmente para o lodash versão 2.4.1, atualizada para o lodash 4.0.0
javascript
functional-programming
lodash
Conrad.Dean
fonte
fonte
_.contains
foi removido no lodash v4 - em_.includes
vez disso, use #contains
alias.Respostas:
O método
includes
(anteriormente chamadocontains
einclude
) compara objetos por referência (ou mais precisamente, com===
). Como os dois literais de objeto do{"b": 2}
seu exemplo representam instâncias diferentes , eles não são iguais. Aviso prévio:No entanto, isso funcionará porque há apenas uma instância de
{"b": 2}
:Por outro lado, os métodos
where
(descontinuado na v4) e osfind
métodos comparam objetos por suas propriedades, para que eles não exijam igualdade de referência. Como alternativaincludes
, você pode tentarsome
(também conhecido comoany
):fonte
Complementando a resposta
p.s.w.g
, aqui estão três outras maneiras de conseguir isso usandolodash
4.17.5
, sem usar_.includes()
:Digamos que você queira adicionar um objeto
entry
a uma matriz de objetosnumbers
, apenas seentry
ainda não existir.Se você quiser retornar um
Boolean
, no primeiro caso, poderá verificar o índice que está sendo retornado:fonte