63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import Stack from './_Stack.js';
 | 
						|
import baseIsEqual from './_baseIsEqual.js';
 | 
						|
 | 
						|
/** 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;
 | 
						|
}
 | 
						|
 | 
						|
export default baseIsMatch;
 |