You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
749 B
29 lines
749 B
// @flow
|
|
|
|
/**
|
|
* Deeply compares two object literals.
|
|
*
|
|
* @private
|
|
*/
|
|
function deepEqual(a: ?mixed, b: ?mixed): boolean {
|
|
if (Array.isArray(a)) {
|
|
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
for (let i = 0; i < a.length; i++) {
|
|
if (!deepEqual(a[i], b[i])) return false;
|
|
}
|
|
return true;
|
|
}
|
|
if (typeof a === 'object' && a !== null && b !== null) {
|
|
if (!(typeof b === 'object')) return false;
|
|
const keys = Object.keys(a);
|
|
if (keys.length !== Object.keys(b).length) return false;
|
|
for (const key in a) {
|
|
if (!deepEqual(a[key], b[key])) return false;
|
|
}
|
|
return true;
|
|
}
|
|
return a === b;
|
|
}
|
|
|
|
export default deepEqual;
|