###*
* Returns an object containing the extremes of this array.
*
* @param {Function} [fn] An optional funtion used to evaluate
* each element to calculate its value for determining extremes.
* @returns {min: minElement, max: maxElement}
* @type Object
###
Array::extremes = (fn) ->
fn ||= (n) -> n
min = max = undefined
minResult = maxResult = undefined
this.each (object) ->
result = fn(object)
if min?
if result maxResult
max = object
maxResult = result
else
max = object
maxResult = result
min: min
max: max
Usage:
[-1, 3, 0].extremes() # => {min: -1, max: 3}
test "#extremes", ->
array = [-7, 1, 11, 94]
extremes = array.extremes()
equals extremes.min, -7, "Min is -7"
equals extremes.max, 94, "Max is 94"
extremes = array.extremes (value) ->
value.mod 11
equals extremes.min, 11
equals extremes.max, 94
