42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import isSymbol from './isSymbol.js';
 | 
						|
 | 
						|
/**
 | 
						|
 * 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;
 | 
						|
}
 | 
						|
 | 
						|
export default compareAscending;
 |