# Taken from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/Reduce if not Array::reduce? Array::reduce = -> accumulator = arguments[0] ctr = 0 if typeof accumulator != 'function' throw new TypeError "First argument is not callable" curr = if arguments.length < 2 if @length == 0 then throw new TypeError "Array length is 0 and no second argument" ctr = 1 @[0] else arguments[1] for i in [ctr...@length] curr = accumulator.call(undefined, curr, @[i], i, @) curr