Junior
Como comparar objetos em JavaScript?
sobes.tech IA
Resposta da IA
No JavaScript, a comparação direta de objetos com === ou == verifica a identidade das referências, não a igualdade do conteúdo. Para comparar objetos pelo conteúdo, existem as seguintes abordagens:
-
Comparação superficial:
- Verifica se as chaves e valores coincidem no primeiro nível de aninhamento.
- Aplica-se a objetos "planos" sem objetos ou arrays aninhados.
- Pode ser implementado manualmente iterando sobre as chaves ou usando
Object.keys()eevery().
// Exemplo de comparação superficial const saoIguaisSuperficial = (obj1, obj2) => { const chaves1 = Object.keys(obj1); const chaves2 = Object.keys(obj2); if (chaves1.length !== chaves2.length) { return false; } for (let chave of chaves1) { if (obj1[chave] !== obj2[chave]) { return false; } } return true; }; -
Comparação profunda:
- Verifica recursivamente todos os níveis de objetos e arrays.
- Necessária para comparar estruturas de dados complexas.
- Pode usar recursão ou uma abordagem iterativa com uma pilha.
- Requer manipular diferentes tipos de dados (primitivos, objetos, arrays, datas, expressões regulares).
-
Comparação usando
JSON.stringify():- Converte objetos em strings JSON e compara essas strings.
- Método simples, mas com limitações:
- Não considera a ordem das chaves nos objetos.
- Não processa funções,
undefined,NaN,Infinity. - Pode ser ineficiente para objetos muito grandes.
// Exemplo de comparação com JSON.stringify const saoIguaisJSON = (obj1, obj2) => { return JSON.stringify(obj1) === JSON.stringify(obj2); }; -
Uso de bibliotecas externas:
- Bibliotecas como
lodash(função_.isEqual) oudeep-equaloferecem implementações confiáveis e otimizadas para comparação profunda, considerando múltiplos detalhes (ligações cíclicas, diferentes tipos, casos limite).
- Bibliotecas como
A escolha do método depende da precisão necessária e da complexidade dos objetos a comparar. Para casos simples, basta comparação superficial ou JSON.stringify(). Para estruturas complexas, recomenda-se usar comparação profunda ou bibliotecas especializadas.