shineout
Version:
Shein 前端组件库
89 lines (70 loc) • 2.33 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.compareColumns = compareColumns;
exports.default = _default;
var _deepEql = _interopRequireDefault(require("deep-eql"));
var hasOwnProperty = Object.prototype.hasOwnProperty;
function is(x, y) {
if (x === y) {
return x !== 0 || y !== 0 || 1 / x === 1 / y;
} // eslint-disable-next-line
return x !== x && y !== y;
}
function getOption(options, key) {
if (!options[key]) return [];
var val = options[key];
return Array.isArray(val) ? val : [val];
}
function compareColumns(columns1, columns2) {
if (!columns1 || !columns2) return true;
if (columns1.length !== columns2.length) return false;
var simpleCompare = columns1.every(function (c, i) {
return c.width === columns2[i].width || Number.isNaN(c.width) && Number.isNaN(columns2[i].width);
});
if (!simpleCompare) return false;
var complexCompare = columns1.every(function (c, i) {
if (Array.isArray(c.group) && Array.isArray(columns2[i].group)) return c.group.every(function (d, index) {
return d === columns2[i].group[index];
});
return c.group === columns2[i].group;
});
return complexCompare;
}
function _default(objA, objB, options) {
if (options === void 0) {
options = {};
}
if (is(objA, objB)) {
return true;
}
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
return false;
}
var keysA = Object.keys(objA);
var keysB = Object.keys(objB);
var skip = getOption(options, 'skip');
var deep = getOption(options, 'deep');
if (keysA.length !== keysB.length) {
return false;
}
keysA.sort(function (a, b) {
return deep.indexOf(a) - deep.indexOf(b);
}); // Test for A's keys different from B.
for (var i = 0; i < keysA.length; i++) {
var k = keysA[i];
if (skip.includes(k)) continue;
if (!hasOwnProperty.call(objB, k) || !is(objA[k], objB[k])) {
if (objA[k] instanceof Error && objB[k] instanceof Error) {
if (objA[k].message !== objB[k].message) return false;
continue;
}
if (deep.includes(k)) {
if (!(0, _deepEql.default)(objA[k], objB[k])) return false;
} else {
return false;
}
}
}
return true;
}