Overview
Implement deepEqual(a, b) that returns true if two values are deeply equal.
Constraints
- Handle primitives, objects, arrays, null
- Objects compared by keys and values, not reference
- Arrays compared element by element
Examples
deepEqual({ a: 1, b: { c: 2 }}, { a: 1, b: { c: 2 }}); // true
deepEqual([1, [2]], [1, [3]]); // falseSolution
Reveal solution
function deepEqual(a, b) {
if (a === b) return true;
if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;
if (Array.isArray(a) !== Array.isArray(b)) return false;
const keysA = Object.keys(a);
const keysB = Object.keys(b);
if (keysA.length !== keysB.length) return false;
return keysA.every(key => deepEqual(a[key], b[key]));
}deep-equal.js
Deep Equal
mediumcodingJavaScriptObjects
Overview
Implement deepEqual(a, b) that returns true if two values are deeply equal.
Constraints
- Handle primitives, objects, arrays, null
- Objects compared by keys and values, not reference
- Arrays compared element by element
Examples
deepEqual({ a: 1, b: { c: 2 }}, { a: 1, b: { c: 2 }}); // true
deepEqual([1, [2]], [1, [3]]); // falseSolution
Reveal solution
function deepEqual(a, b) {
if (a === b) return true;
if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;
if (Array.isArray(a) !== Array.isArray(b)) return false;
const keysA = Object.keys(a);
const keysB = Object.keys(b);
if (keysA.length !== keysB.length) return false;
return keysA.every(key => deepEqual(a[key], b[key]));
}NameTopicDifficulty
103 of 103 problems