| 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; |