Files
BetterSEQTA-Plus/src/seqta/utils/isEqual.ts
T
2026-07-19 18:08:52 +09:30

21 lines
736 B
TypeScript

/** Deep equality for JSON-like sync payloads (objects, arrays, primitives). */
export default function isEqual(a: unknown, b: unknown): boolean {
if (a === b) return true;
if (a == null || b == null) return false;
if (typeof a !== typeof b) return false;
if (typeof a !== "object") return false;
if (Array.isArray(a)) {
if (!Array.isArray(b) || a.length !== b.length) return false;
return a.every((v, i) => isEqual(v, b[i]));
}
if (Array.isArray(b)) return false;
const aObj = a as Record<string, unknown>;
const bObj = b as Record<string, unknown>;
const aKeys = Object.keys(aObj);
if (aKeys.length !== Object.keys(bObj).length) return false;
return aKeys.every((k) => isEqual(aObj[k], bObj[k]));
}