Igualdade entre Objetos
Comparando objetos em JavaScript como .some() e JSON.stringify()
Para sabermos se um objeto é igual a outro, precisamos ter um método de comparação. Este método, em geral, deve ficar junto da classe responsável por criar os objetos.
Em linguagens como o Java, o método equals() é herdado desde a classe mãe de todas as outras, a Object(), e pode ser reescrito pelas classes mais específicas para aplicar o padrão de comparação desejado.
No mundo JavaScript, não existe um nome padrão para esse tipo de método — o mais utilizado é equals
ou isEquals
.
Dentro da classe construtora de um determinado tipo de objeto, crie o método para comparação:
isEquals(objeto) {
return JSON.stringify(this) == JSON.stringify(objeto)
}
O método stringify da classe JSON transforma um objeto em uma string. Assim, é possível compararmos de forma fácil se dois objetos são iguais. Sendo iguais, eles produziram a mesma string ao serem convertidos. Se for igual, ele retornará um booleano true.
Para utilizar o método isEquals, basta chamá-lo passando o objeto que deverá ser comparado:
objetoExistente => objeto.isEquals(objetoExistente)
Por exemplo, se você tem uma lista de objetos e quer certificar-se de não adicionar nenhum objeto duplicado, pode utilizar os métodos filter() e some() de Array para aplicar a comparação:
lista => lista.filter(objeto =>
!lista.some(objetoExistente =>
objeto.isEquals(objetoExistente)
)
)