You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							84 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							84 lines
						
					
					
						
							2.6 KiB
						
					
					
				var SetCache = require('./_SetCache'), | 
						|
    arraySome = require('./_arraySome'), | 
						|
    cacheHas = require('./_cacheHas'); | 
						|
 | 
						|
/** Used to compose bitmasks for value comparisons. */ | 
						|
var COMPARE_PARTIAL_FLAG = 1, | 
						|
    COMPARE_UNORDERED_FLAG = 2; | 
						|
 | 
						|
/** | 
						|
 * A specialized version of `baseIsEqualDeep` for arrays with support for | 
						|
 * partial deep comparisons. | 
						|
 * | 
						|
 * @private | 
						|
 * @param {Array} array The array to compare. | 
						|
 * @param {Array} other The other array to compare. | 
						|
 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. | 
						|
 * @param {Function} customizer The function to customize comparisons. | 
						|
 * @param {Function} equalFunc The function to determine equivalents of values. | 
						|
 * @param {Object} stack Tracks traversed `array` and `other` objects. | 
						|
 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. | 
						|
 */ | 
						|
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { | 
						|
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG, | 
						|
      arrLength = array.length, | 
						|
      othLength = other.length; | 
						|
 | 
						|
  if (arrLength != othLength && !(isPartial && othLength > arrLength)) { | 
						|
    return false; | 
						|
  } | 
						|
  // Check that cyclic values are equal. | 
						|
  var arrStacked = stack.get(array); | 
						|
  var othStacked = stack.get(other); | 
						|
  if (arrStacked && othStacked) { | 
						|
    return arrStacked == other && othStacked == array; | 
						|
  } | 
						|
  var index = -1, | 
						|
      result = true, | 
						|
      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; | 
						|
 | 
						|
  stack.set(array, other); | 
						|
  stack.set(other, array); | 
						|
 | 
						|
  // Ignore non-index properties. | 
						|
  while (++index < arrLength) { | 
						|
    var arrValue = array[index], | 
						|
        othValue = other[index]; | 
						|
 | 
						|
    if (customizer) { | 
						|
      var compared = isPartial | 
						|
        ? customizer(othValue, arrValue, index, other, array, stack) | 
						|
        : customizer(arrValue, othValue, index, array, other, stack); | 
						|
    } | 
						|
    if (compared !== undefined) { | 
						|
      if (compared) { | 
						|
        continue; | 
						|
      } | 
						|
      result = false; | 
						|
      break; | 
						|
    } | 
						|
    // Recursively compare arrays (susceptible to call stack limits). | 
						|
    if (seen) { | 
						|
      if (!arraySome(other, function(othValue, othIndex) { | 
						|
            if (!cacheHas(seen, othIndex) && | 
						|
                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { | 
						|
              return seen.push(othIndex); | 
						|
            } | 
						|
          })) { | 
						|
        result = false; | 
						|
        break; | 
						|
      } | 
						|
    } else if (!( | 
						|
          arrValue === othValue || | 
						|
            equalFunc(arrValue, othValue, bitmask, customizer, stack) | 
						|
        )) { | 
						|
      result = false; | 
						|
      break; | 
						|
    } | 
						|
  } | 
						|
  stack['delete'](array); | 
						|
  stack['delete'](other); | 
						|
  return result; | 
						|
} | 
						|
 | 
						|
module.exports = equalArrays;
 | 
						|
 |