@amaui/utils
Version:
20 lines (16 loc) • 726 B
JavaScript
const isObjectLike = value => typeof value === 'object' && value !== null && !Array.isArray(value);
const equalDeep = (valueA, valueB) => {
if (valueA === valueB) return true;
if (Number.isNaN(valueA) && Number.isNaN(valueB)) return true;
if (typeof valueA !== typeof valueB && !(isObjectLike(valueA) && isObjectLike(valueB))) return false;
if (Array.isArray(valueA) && valueA.length === valueB.length) return valueA.every((item, index) => equalDeep(item, valueB[index]));
if (isObjectLike(valueA)) {
const valueA_ = { ...valueA
};
const valueB_ = { ...valueB
};
return Object.keys(valueA_).every(key => equalDeep(valueA_[key], valueB_[key]));
}
return false;
};
export default equalDeep;