42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var isSymbol = require('./isSymbol'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Compares values to sort them in ascending order. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {*} value The value to compare. | ||
|  |  * @param {*} other The other value to compare. | ||
|  |  * @returns {number} Returns the sort order indicator for `value`. | ||
|  |  */ | ||
|  | function compareAscending(value, other) { | ||
|  |   if (value !== other) { | ||
|  |     var valIsDefined = value !== undefined, | ||
|  |         valIsNull = value === null, | ||
|  |         valIsReflexive = value === value, | ||
|  |         valIsSymbol = isSymbol(value); | ||
|  | 
 | ||
|  |     var othIsDefined = other !== undefined, | ||
|  |         othIsNull = other === null, | ||
|  |         othIsReflexive = other === other, | ||
|  |         othIsSymbol = isSymbol(other); | ||
|  | 
 | ||
|  |     if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || | ||
|  |         (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || | ||
|  |         (valIsNull && othIsDefined && othIsReflexive) || | ||
|  |         (!valIsDefined && othIsReflexive) || | ||
|  |         !valIsReflexive) { | ||
|  |       return 1; | ||
|  |     } | ||
|  |     if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || | ||
|  |         (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || | ||
|  |         (othIsNull && valIsDefined && valIsReflexive) || | ||
|  |         (!othIsDefined && valIsReflexive) || | ||
|  |         !othIsReflexive) { | ||
|  |       return -1; | ||
|  |     } | ||
|  |   } | ||
|  |   return 0; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = compareAscending; |