@vitruvius-labs/ts-predicate
Version:
TypeScript predicates library
31 lines (30 loc) • 882 B
JavaScript
import { isRecord } from "../type-guard/is-record.mjs";
function isSimilar(a, b) {
if (a === b) {
return true;
}
if (Number.isNaN(a) && Number.isNaN(b)) {
return true;
}
if (isRecord(a) && isRecord(b)) {
const KEYS_A = Object.keys(a);
const KEYS_B = Object.keys(b);
if (!isSimilar(KEYS_A, KEYS_B)) {
return false;
}
return KEYS_A.every((key) => {
return isSimilar(a[key], b[key]);
});
}
if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {
// Stryker disable next-line EqualityOperator: Accessing out of bound values on both arrays
for (let i = 0; i < a.length; ++i) {
if (!isSimilar(a[i], b[i])) {
return false;
}
}
return true;
}
return false;
}
export { isSimilar };