58 lines
1.0 KiB
JavaScript
58 lines
1.0 KiB
JavaScript
|
import _curry2 from "./internal/_curry2.js";
|
||
|
import toString from "./toString.js";
|
||
|
/**
|
||
|
* Returns the larger of its two arguments.
|
||
|
*
|
||
|
* @func
|
||
|
* @memberOf R
|
||
|
* @since v0.1.0
|
||
|
* @category Relation
|
||
|
* @sig Ord a => a -> a -> a
|
||
|
* @param {*} a
|
||
|
* @param {*} b
|
||
|
* @return {*}
|
||
|
* @see R.maxBy, R.min
|
||
|
* @example
|
||
|
*
|
||
|
* R.max(789, 123); //=> 789
|
||
|
* R.max('a', 'b'); //=> 'b'
|
||
|
*/
|
||
|
|
||
|
var max =
|
||
|
/*#__PURE__*/
|
||
|
_curry2(function max(a, b) {
|
||
|
if (a === b) {
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
function safeMax(x, y) {
|
||
|
if (x > y !== y > x) {
|
||
|
return y > x ? y : x;
|
||
|
}
|
||
|
|
||
|
return undefined;
|
||
|
}
|
||
|
|
||
|
var maxByValue = safeMax(a, b);
|
||
|
|
||
|
if (maxByValue !== undefined) {
|
||
|
return maxByValue;
|
||
|
}
|
||
|
|
||
|
var maxByType = safeMax(typeof a, typeof b);
|
||
|
|
||
|
if (maxByType !== undefined) {
|
||
|
return maxByType === typeof a ? a : b;
|
||
|
}
|
||
|
|
||
|
var stringA = toString(a);
|
||
|
var maxByStringValue = safeMax(stringA, toString(b));
|
||
|
|
||
|
if (maxByStringValue !== undefined) {
|
||
|
return maxByStringValue === stringA ? a : b;
|
||
|
}
|
||
|
|
||
|
return b;
|
||
|
});
|
||
|
|
||
|
export default max;
|