Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente acha que pode usar == ou === pra comparar objetos em JS, mas isso é um erro clássico. Esses operadores só verificam se a referência é igual, não o conteúdo.
Para comparar dois objetos realmente, tem que fazer uma verificação profunda — conferir se todas as chaves e valores batem. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Uma solução simples e prática é criar uma função que verifica cada propriedade recursivamente, sem precisar de libs externas. Assim, você garante que os objetos são iguais de conteúdo, não só de referência. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true. if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 == null || obj2 == null) return false. const keys1 = Object.keys(obj1). const keys2 = Object.keys(obj2). if (keys1.length !== keys2.length) return false. for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) return false. }
return true. }
Isso ajuda pra cacete na hora de validar configurações ou dados de resposta, por exemplo. Dá pra usar direto, funciona bem. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Quem aí já precisou fazer isso? Como costuma resolver na sua rotina?
Carregando comentários...