@technobuddha/library
Version:
A large library of useful functions
58 lines (53 loc) • 1.33 kB
text/typescript
import isUndefined from 'lodash/isUndefined';
import isNull from 'lodash/isNull';
import isNaN from 'lodash/isNaN';
import toPrimitive from '../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
*/
export function compare(x: unknown, y: unknown): number {
const px = toPrimitive(x, 'number');
const py = toPrimitive(y, 'number');
if(isUndefined(px) && isUndefined(py)) {
return 0;
} else if(isUndefined(px)) {
return -1;
} else if(isUndefined(py)) {
return 1;
} else if(isNull(px) && isNull(py)) {
return 0;
} else if(isNull(px)) {
return -1;
} else if(isNull(py)) {
return 1;
} else if(typeof px !== 'string' && typeof py !== 'string') {
const nx = Number(px);
const ny = Number(py);
if(isNaN(nx) && isNaN(py))
return 0;
else
if(isNaN(nx))
return -1;
else
if(isNaN(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;
}
export default compare;