import reduce from './reduce'; var slice = Array.prototype.slice; /** * Same as `reduce`, only operates on `coll` in reverse order. * * @name reduceRight * @static * @memberOf async * @see async.reduce * @alias foldr * @category Collection * @param {Array|Object} coll - A collection to iterate over. * @param {*} memo - The initial state of the reduction. * @param {Function} iteratee - A function applied to each item in the * array to produce the next step in the reduction. The `iteratee` is passed a * `callback(err, reduction)` which accepts an optional error as its first * argument, and the state of the reduction as the second. If an error is * passed to the callback, the reduction is stopped and the main `callback` is * immediately called with the error. Invoked with (memo, item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result is the reduced value. Invoked with * (err, result). */ export default function reduceRight (arr, memo, iteratee, cb) { var reversed = slice.call(arr).reverse(); reduce(reversed, memo, iteratee, cb); }