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.9 KiB
			
		
		
			
		
	
	
					84 lines
				
				2.9 KiB
			| 
											3 years ago
										 | var Stack = require('./_Stack'), | ||
|  |     equalArrays = require('./_equalArrays'), | ||
|  |     equalByTag = require('./_equalByTag'), | ||
|  |     equalObjects = require('./_equalObjects'), | ||
|  |     getTag = require('./_getTag'), | ||
|  |     isArray = require('./isArray'), | ||
|  |     isBuffer = require('./isBuffer'), | ||
|  |     isTypedArray = require('./isTypedArray'); | ||
|  | 
 | ||
|  | /** Used to compose bitmasks for value comparisons. */ | ||
|  | var COMPARE_PARTIAL_FLAG = 1; | ||
|  | 
 | ||
|  | /** `Object#toString` result references. */ | ||
|  | var argsTag = '[object Arguments]', | ||
|  |     arrayTag = '[object Array]', | ||
|  |     objectTag = '[object Object]'; | ||
|  | 
 | ||
|  | /** Used for built-in method references. */ | ||
|  | var objectProto = Object.prototype; | ||
|  | 
 | ||
|  | /** Used to check objects for own properties. */ | ||
|  | var hasOwnProperty = objectProto.hasOwnProperty; | ||
|  | 
 | ||
|  | /** | ||
|  |  * A specialized version of `baseIsEqual` for arrays and objects which performs | ||
|  |  * deep comparisons and tracks traversed objects enabling objects with circular | ||
|  |  * references to be compared. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {Object} object The object to compare. | ||
|  |  * @param {Object} other The other object 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 `object` and `other` objects. | ||
|  |  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. | ||
|  |  */ | ||
|  | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { | ||
|  |   var objIsArr = isArray(object), | ||
|  |       othIsArr = isArray(other), | ||
|  |       objTag = objIsArr ? arrayTag : getTag(object), | ||
|  |       othTag = othIsArr ? arrayTag : getTag(other); | ||
|  | 
 | ||
|  |   objTag = objTag == argsTag ? objectTag : objTag; | ||
|  |   othTag = othTag == argsTag ? objectTag : othTag; | ||
|  | 
 | ||
|  |   var objIsObj = objTag == objectTag, | ||
|  |       othIsObj = othTag == objectTag, | ||
|  |       isSameTag = objTag == othTag; | ||
|  | 
 | ||
|  |   if (isSameTag && isBuffer(object)) { | ||
|  |     if (!isBuffer(other)) { | ||
|  |       return false; | ||
|  |     } | ||
|  |     objIsArr = true; | ||
|  |     objIsObj = false; | ||
|  |   } | ||
|  |   if (isSameTag && !objIsObj) { | ||
|  |     stack || (stack = new Stack); | ||
|  |     return (objIsArr || isTypedArray(object)) | ||
|  |       ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) | ||
|  |       : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); | ||
|  |   } | ||
|  |   if (!(bitmask & COMPARE_PARTIAL_FLAG)) { | ||
|  |     var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), | ||
|  |         othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); | ||
|  | 
 | ||
|  |     if (objIsWrapped || othIsWrapped) { | ||
|  |       var objUnwrapped = objIsWrapped ? object.value() : object, | ||
|  |           othUnwrapped = othIsWrapped ? other.value() : other; | ||
|  | 
 | ||
|  |       stack || (stack = new Stack); | ||
|  |       return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); | ||
|  |     } | ||
|  |   } | ||
|  |   if (!isSameTag) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   stack || (stack = new Stack); | ||
|  |   return equalObjects(object, other, bitmask, customizer, equalFunc, stack); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = baseIsEqualDeep; |