63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var Stack = require('./_Stack'), | ||
|  |     baseIsEqual = require('./_baseIsEqual'); | ||
|  | 
 | ||
|  | /** Used to compose bitmasks for value comparisons. */ | ||
|  | var COMPARE_PARTIAL_FLAG = 1, | ||
|  |     COMPARE_UNORDERED_FLAG = 2; | ||
|  | 
 | ||
|  | /** | ||
|  |  * The base implementation of `_.isMatch` without support for iteratee shorthands. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {Object} object The object to inspect. | ||
|  |  * @param {Object} source The object of property values to match. | ||
|  |  * @param {Array} matchData The property names, values, and compare flags to match. | ||
|  |  * @param {Function} [customizer] The function to customize comparisons. | ||
|  |  * @returns {boolean} Returns `true` if `object` is a match, else `false`. | ||
|  |  */ | ||
|  | function baseIsMatch(object, source, matchData, customizer) { | ||
|  |   var index = matchData.length, | ||
|  |       length = index, | ||
|  |       noCustomizer = !customizer; | ||
|  | 
 | ||
|  |   if (object == null) { | ||
|  |     return !length; | ||
|  |   } | ||
|  |   object = Object(object); | ||
|  |   while (index--) { | ||
|  |     var data = matchData[index]; | ||
|  |     if ((noCustomizer && data[2]) | ||
|  |           ? data[1] !== object[data[0]] | ||
|  |           : !(data[0] in object) | ||
|  |         ) { | ||
|  |       return false; | ||
|  |     } | ||
|  |   } | ||
|  |   while (++index < length) { | ||
|  |     data = matchData[index]; | ||
|  |     var key = data[0], | ||
|  |         objValue = object[key], | ||
|  |         srcValue = data[1]; | ||
|  | 
 | ||
|  |     if (noCustomizer && data[2]) { | ||
|  |       if (objValue === undefined && !(key in object)) { | ||
|  |         return false; | ||
|  |       } | ||
|  |     } else { | ||
|  |       var stack = new Stack; | ||
|  |       if (customizer) { | ||
|  |         var result = customizer(objValue, srcValue, key, object, source, stack); | ||
|  |       } | ||
|  |       if (!(result === undefined | ||
|  |             ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) | ||
|  |             : result | ||
|  |           )) { | ||
|  |         return false; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   return true; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = baseIsMatch; |