Files
lodash/internal/createExtremum.js
2015-06-30 00:06:56 -07:00

34 lines
1.1 KiB
JavaScript

import arrayExtremum from './arrayExtremum';
import baseCallback from './baseCallback';
import baseExtremum from './baseExtremum';
import isArray from '../lang/isArray';
import isIterateeCall from './isIterateeCall';
import toIterable from './toIterable';
/**
* Creates a `_.max` or `_.min` function.
*
* @private
* @param {Function} comparator The function used to compare values.
* @param {*} exValue The initial extremum value.
* @returns {Function} Returns the new extremum function.
*/
function createExtremum(comparator, exValue) {
return function(collection, iteratee, thisArg) {
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
iteratee = undefined;
}
iteratee = baseCallback(iteratee, thisArg, 3);
if (iteratee.length == 1) {
collection = isArray(collection) ? collection : toIterable(collection);
var result = arrayExtremum(collection, iteratee, comparator, exValue);
if (!(collection.length && result === exValue)) {
return result;
}
}
return baseExtremum(collection, iteratee, comparator, exValue);
};
}
export default createExtremum;