// Created on savesnippets.com ยท https://savesnippets.com/ovjhVA4kDZceNJ function deepEqual(a, b) { if (a === b) return true; if (a == null || b == null) return a === b; if (typeof a !== typeof b) return false; if (a instanceof Date) return a.getTime() === b.getTime(); if (a instanceof Set) return a.size === b.size && [...a].every((v) => b.has(v)); if (a instanceof Map) { if (a.size !== b.size) return false; for (const [k, v] of a) { if (!deepEqual(v, b.get(k))) return false; } return true; } if (typeof a !== 'object') return false; const keysA = Object.keys(a), keysB = Object.keys(b); if (keysA.length !== keysB.length) return false; return keysA.every((k) => deepEqual(a[k], b[k])); } // Usage console.log(deepEqual({ a: [1, 2] }, { a: [1, 2] })); // true console.log(deepEqual({ a: 1 }, { a: 2 })); // false