Introdução
Neste laboratório, exploraremos o conceito de igualdade de objetos em JavaScript. Aprenderemos como realizar uma comparação profunda (deep comparison) entre dois valores para determinar se eles são equivalentes, utilizando diversas técnicas, como verificar se os valores são idênticos, verificar se são valores não-objeto com um valor equivalente e usar Object.keys() para verificar se ambos os valores possuem o mesmo número de chaves. Também entenderemos como usar recursão para comparar objetos aninhados.
Como Verificar a Igualdade de Objetos em JavaScript
Para verificar se dois valores são equivalentes, siga estes passos:
- Abra o Terminal/SSH e digite
nodepara começar a praticar a codificação. - Realize uma comparação profunda (deep comparison) entre os dois valores usando a função
equals(). - Verifique se os dois valores são idênticos. Se sim, retorne
true. - Verifique se ambos os valores são objetos
Datecom o mesmo tempo, usandoDate.prototype.getTime(). Se sim, retornetrue. - Verifique se ambos os valores são valores não-objeto com um valor equivalente (comparação estrita). Se sim, retorne
true. - Verifique se apenas um valor é
nullouundefinedou se seus protótipos diferem. Se sim, retornefalse. - Se nenhuma das condições acima for atendida, use
Object.keys()para verificar se ambos os valores possuem o mesmo número de chaves. - Use
Array.prototype.every()para verificar se cada chave emaexiste embe se elas são equivalentes, chamandoequals()recursivamente.
Use o seguinte código para implementar a função equals():
const equals = (a, b) => {
if (a === b) return true;
if (a instanceof Date && b instanceof Date)
return a.getTime() === b.getTime();
if (!a || !b || (typeof a !== "object" && typeof b !== "object"))
return a === b;
if (a.prototype !== b.prototype) return false;
const keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every((k) => equals(a[k], b[k]));
};
Use os seguintes exemplos de código para testar a função equals():
equals(
{ a: [2, { e: 3 }], b: [4], c: "foo" },
{ a: [2, { e: 3 }], b: [4], c: "foo" }
); // true
equals([1, 2, 3], { 0: 1, 1: 2, 2: 3 }); // true
Resumo
Parabéns! Você concluiu o laboratório de Verificação de Igualdade de Objetos. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.