UNPKG

@antv/f2

Version:

Charts for mobile visualization.

71 lines 1.72 kB
import _typeof from "@babel/runtime/helpers/esm/typeof"; import { isArray, isFunction, isPlainObject } from '@antv/util'; function objToString(obj) { return Object.prototype.toString.call(obj); } function objectKeys(obj) { return Object.keys(obj); } function equal(a, b) { if (a === b) return true; if (_typeof(a) !== _typeof(b)) { return false; } // null 和 undefined if (a == null || b == null) { return false; } // 特殊处理NaN if (Number.isNaN(a) && Number.isNaN(b)) { return true; } if (objToString(a) !== objToString(b)) { return false; } // 如果是function, 则认为是相对 if (isFunction(a)) { return true; } // 值类型,Number String Boolean if (_typeof(a) !== 'object') { return false; } if (isArray(a)) { if (a.length !== b.length) { return false; } for (var i = a.length - 1; i >= 0; i--) { if (!equal(a[i], b[i])) { return false; } } return true; } if (!isPlainObject(a)) { return false; } var ka = objectKeys(a); var kb = objectKeys(b); // having the same number of owned properties (keys incorporates hasOwnProperty) if (ka.length !== kb.length) { return false; } // the same set of keys (although not necessarily the same order), ka.sort(); kb.sort(); // ~~~cheap key test for (var _i = ka.length - 1; _i >= 0; _i--) { if (ka[_i] != kb[_i]) { return false; } } // equivalent values for every corresponding key, and ~~~possibly expensive deep test for (var _i2 = ka.length - 1; _i2 >= 0; _i2--) { var key = ka[_i2]; if (!equal(a[key], b[key])) { return false; } } return true; } export default equal;