bizcharts
Version:
bizcharts
51 lines (41 loc) • 916 B
text/typescript
import _each from '@antv/util/lib/each';
import _isArray from '@antv/util/lib/is-array';
import _isObject from '@antv/util/lib/is-object';
function is(x, y) {
if (x === y) {
return x !== 0 || y !== 0 || 1 / x === 1 / y;
}
return x !== x && y !== y; // NaN == NaN
}
function length(obj) {
if (_isArray(obj)) {
return obj.length;
}
if (_isObject(obj)) {
return Object.keys(obj).length;
}
return 0;
}
export default function(objA, objB) {
if (is(objA, objB)) {
return true;
}
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
return false;
}
if (_isArray(objA) !== _isArray(objB)) {
return false;
}
if (length(objA) !== length(objB)) {
return false;
}
let ret = true;
_each(objA, (v, k) => {
if (!is(v, objB[k])) {
ret = false;
return ret;
}
return true;
});
return ret;
}