isEqual
Performs a deep comparison between two values to determine if they are equivalent, supports objects, arrays, numbers, strings, booleans, null, and undefined.
Relies on isKeyOf for object key comparison.
export function isEqual(a: unknown, b: unknown): boolean {
if (a === b) return true;
if (!a || !b) return false;
if (typeof a !== typeof b) return false;
if (Array.isArray(a)) {
if (!Array.isArray(b) || a.length !== b.length) return false;
return a.every((val, i) => isEqual(val, b[i]));
}
if (typeof a === "object" && typeof b === "object") {
const keysA = Object.keys(a);
const keysB = Object.keys(b);
if (keysA.length !== keysB.length) return false;
for (const key of keysA) {
if (!isKeyOf(b, key)) return false;
if (!isEqual(a[key], b[key])) return false;
}
}
return true;
}