var isSymbol = require('./isSymbol');

/**

* The base implementation of methods like `_.max` and `_.min` which accepts a
* `comparator` to determine the extremum value.
*
* @private
* @param {Array} array The array to iterate over.
* @param {Function} iteratee The iteratee invoked per iteration.
* @param {Function} comparator The comparator used to compare values.
* @returns {*} Returns the extremum value.
*/

function baseExtremum(array, iteratee, comparator) {

var index = -1,
    length = array.length;

while (++index < length) {
  var value = array[index],
      current = iteratee(value);

  if (current != null && (computed === undefined
        ? (current === current && !isSymbol(current))
        : comparator(current, computed)
      )) {
    var computed = current,
        result = value;
  }
}
return result;

}

module.exports = baseExtremum;