voided-data
Version:
Proper DS for TS
46 lines (45 loc) • 1.77 kB
JavaScript
;
// null, string, number, bigint, undefined, boolean
Object.defineProperty(exports, "__esModule", { value: true });
const equals = (self, other) => {
if (self === null || other === null)
return self === other;
if (typeof self !== typeof other)
return false;
if (Array.isArray(self) !== Array.isArray(other))
return false;
if (Array.isArray(self)) {
if (self.length !== other.length)
return false;
for (let i = 0; i < self.length; i++) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const left = self[i];
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const right = other[i];
if (!equals(left, right))
return false;
}
return true;
}
if (typeof self === 'object') {
const selfValues = Object.entries(self);
const otherValues = Object.entries(other);
selfValues.sort(([l], [r]) => l.localeCompare(r));
otherValues.sort(([l], [r]) => l.localeCompare(r));
if (selfValues.length !== otherValues.length)
return false;
for (let i = 0; i < selfValues.length; i++) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const [, left] = selfValues[i];
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const [, right] = otherValues[i];
if (!equals(left, right))
return false;
}
return true;
}
if (Number.isNaN(self) && Number.isNaN(other))
return true;
return self === other;
};
exports.default = equals;