@technobuddha/library
Version:
A large library of useful functions
62 lines (61 loc) • 1.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compare = void 0;
var isUndefined_1 = __importDefault(require("lodash/isUndefined"));
var isNull_1 = __importDefault(require("lodash/isNull"));
var isNaN_1 = __importDefault(require("lodash/isNaN"));
var toPrimitive_1 = __importDefault(require("../toPrimitive"));
/**
* Compare two objects
*
* @param a First object
* @param b Second object
* @returns 0 if a == b; -1 if a < b; 1 if a > b
*/
function compare(x, y) {
var px = toPrimitive_1.default(x, 'number');
var py = toPrimitive_1.default(y, 'number');
if (isUndefined_1.default(px) && isUndefined_1.default(py)) {
return 0;
}
else if (isUndefined_1.default(px)) {
return -1;
}
else if (isUndefined_1.default(py)) {
return 1;
}
else if (isNull_1.default(px) && isNull_1.default(py)) {
return 0;
}
else if (isNull_1.default(px)) {
return -1;
}
else if (isNull_1.default(py)) {
return 1;
}
else if (typeof px !== 'string' && typeof py !== 'string') {
var nx = Number(px);
var ny = Number(py);
if (isNaN_1.default(nx) && isNaN_1.default(py))
return 0;
else if (isNaN_1.default(nx))
return -1;
else if (isNaN_1.default(ny))
return 1;
else if (nx === ny)
return 0;
else if (nx < ny)
return -1;
return 1;
}
if (px === py)
return 0;
else if (px < py)
return -1;
return 1;
}
exports.compare = compare;
exports.default = compare;