Skip to main content
Module

x/ramda/mapAccumRight.js

:ram: Practical functional Javascript
Very Popular
Go to Latest
File
import _curry3 from './internal/_curry3';

/** * The `mapAccumRight` function behaves like a combination of map and reduce; it * applies a function to each element of a list, passing an accumulating * parameter from right to left, and returning a final value of this * accumulator together with the new list. * * Similar to [`mapAccum`](#mapAccum), except moves through the input list from * the right to the left. * * The iterator function receives two arguments, *value* and *acc*, and should * return a tuple *[value, acc]*. * * @func * @memberOf R * @since v0.10.0 * @category List * @sig ((x, acc) -> (y, acc)) -> acc -> [x] -> ([y], acc) * @param {Function} fn The function to be called on every element of the input `list`. * @param {*} acc The accumulator value. * @param {Array} list The list to iterate over. * @return {*} The final, accumulated value. * @see R.addIndex, R.mapAccum * @example * * var digits = ['1', '2', '3', '4']; * var append = (a, b) => [a + b, a + b]; * * R.mapAccumRight(append, 5, digits); //=> [['12345', '2345', '345', '45'], '12345'] * @symb R.mapAccumRight(f, a, [b, c, d]) = [ * [ * f(b, f(c, f(d, a)[0])[0])[1], * f(c, f(d, a)[0])[1], * f(d, a)[1], * ] * f(b, f(c, f(d, a)[0])[0])[0], * ] */var mapAccumRight = _curry3(function mapAccumRight(fn, acc, list) { var idx = list.length - 1; var result = []; var tuple = [acc]; while (idx >= 0) { tuple = fn(list[idx], tuple[0]); result[idx] = tuple[1]; idx -= 1; } return [result, tuple[0]];});export default mapAccumRight;