UNPKG

ut2

Version:

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

73 lines (69 loc) 2.67 kB
'use strict'; var allKeys = require('./allKeys.js'); var getTag = require('./internals/getTag.js'); var native = require('./internals/native.js'); var isEqualDeep = require('./internals/isEqualDeep.js'); function isDeepComparable(object, source) { return getTag(object) === native.objectTag && getTag(source) === native.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 !== native.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 !== native.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 !== native.nativeUndefined) { return !!compared; } } return baseIsMatch(object, source, customizer, strictCheck, native.nativeUndefined, native.nativeUndefined); } module.exports = isMatch;