import { addIndex, reduce } from 'ramda'; /** * {@link http://ramdajs.com/docs/#reduce|R.reduce} function that more closely resembles Array.prototype.reduce. * It takes two new parameters to its callback function: the current index, and the entire list. * * `reduceIndexed` implementation is simple : ` * const reduceIndexed = R.addIndex(R.reduce); * ` * @func reduceIndexed * @memberOf RA * @since {@link https://char0n.github.io/ramda-adjunct/2.5.0|v2.5.0} * @category List * @typedef Idx = Number * @sig ((a, b, Idx, [b]) => a) -> a -> [b] -> a * @param {Function} fn The iterator function. Receives four values, * the accumulator, the current element from the array, index and the entire list * @param {*} acc The accumulator value * @param {Array} list The list to iterate over * @return {*} The final, accumulated value * @see {@link http://ramdajs.com/docs/#addIndex|R.addIndex}, {@link http://ramdajs.com/docs/#reduce|R.reduce} * @example * * const initialList = ['f', 'o', 'o', 'b', 'a', 'r']; * * reduceIndexed((acc, val, idx, list) => acc + '-' + val + idx, '', initialList); * //=> "-f0-o1-o2-b3-a4-r5" */ const reduceIndexed = addIndex(reduce); export default reduceIndexed;