Estoy revisando una tarea del elocuente libro de JS, ¡y estoy súper confundido! El punto es comparar 2 objetos.
¿Qué está pasando aquí: !deepEqual(a[key], b[key])
? ¿Por qué necesito ejecutar la recursión en los valores del objeto?
¿Por qué a.key
y b.key
rompen el código?
Si elimino el if (a === b) return true;
línea: ¿el código se rompe? Pensé que estoy haciendo la comparación profunda.
function deepEqual(a, b) { if (a === b) return true; if (a == null || typeof a != "object" || b == null || typeof b != "object") return false; let keysA = Object.keys(a), keysB = Object.keys(b); if (keysA.length != keysB.length) return false; for (let key of keysA) { if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false; } return true; } let obj = { here: { is: "an" }, object: 2 }; console.log(deepEqual(obj, obj)); // → true console.log(deepEqual(obj, { here: 1, object: 2 })); // → false console.log(deepEqual(obj, { here: { is: "an" }, object: 2 })); // → true