Deep Equal
function deepEqual(value1, value2) {
if (value1 === value2) {
return true;
}
if (
typeof value1 !== "object" ||
value1 === null ||
typeof value2 !== "object" ||
value2 === null
) {
return false;
}
const keys1 = Object.keys(value1);
const keys2 = Object.keys(value2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(value1[key], value2[key])) {
return false;
}
}
return true;
}
console.log(deepEqual(42, 43)); // false
console.log(deepEqual(42, 42)); // true
console.log(deepEqual(true, false)); // false
console.log(deepEqual(false, false)); // true
console.log(deepEqual("Arjunan", "arjunan")); // false
console.log(deepEqual("Arjunan", "Arjunan")); // true
console.log(deepEqual({ a: 1 }, { b: 1 })); // false
console.log(deepEqual({ a: 1 }, { a: 1 })); // true
const a = { a: 1, b: 2, c: { d: 4, e: 5, f: { g: 6, h: 7 } } };
const b = a;
console.log(deepEqual(a, b)); // true