UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

71 lines (68 loc) 2.62 kB
import allKeys from './allKeys.js'; import getTag from './internals/getTag.js'; import { nativeUndefined, objectTag } from './internals/native.js'; import isEqualDeep from './internals/isEqualDeep.js'; function isDeepComparable(object, source) { return getTag(object) === objectTag && getTag(source) === objectTag; } function baseIsMatch(object, source, customizer, strictCheck, objStack, srcStack) { var hasCustomizer = typeof customizer === 'function'; if (isDeepComparable(object, source)) { objStack = objStack || []; srcStack = srcStack || []; var stackLen = objStack.length; while (stackLen--) { if (objStack[stackLen] === object && srcStack[stackLen] === source) { return true; } } objStack.push(object); srcStack.push(source); var keys = allKeys(source); var length_1 = keys.length; while (length_1--) { var key = keys[length_1]; if (!(key in object)) { return false; } if (hasCustomizer) { var compared = customizer(object[key], source[key], key, object, source, objStack, srcStack); if (compared !== nativeUndefined) { if (!compared) { return false; } continue; } } if (!baseIsMatch(object[key], source[key], customizer, strictCheck, objStack, srcStack)) { return false; } } objStack.pop(); srcStack.pop(); return true; } var result = isEqualDeep(object, source, function (objValue, srcValue, k, obj, src) { if (hasCustomizer) { var compared = customizer(objValue, srcValue, k, obj, src, objStack, srcStack); if (compared !== nativeUndefined) { return compared; } } if (isDeepComparable(objValue, srcValue)) { return baseIsMatch(objValue, srcValue, customizer, strictCheck, objStack, srcStack); } }, strictCheck, objStack, srcStack); return result; } function isMatch(object, source, customizer, strictCheck) { if (strictCheck === void 0) { strictCheck = false; } if (typeof customizer === 'function') { var compared = customizer(object, source); if (compared !== nativeUndefined) { return !!compared; } } return baseIsMatch(object, source, customizer, strictCheck, nativeUndefined, nativeUndefined); } export { isMatch as default };