mirror of https://gitee.com/bigwinds/arangodb
44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
var _curry3 = require('./internal/_curry3');
|
|
|
|
|
|
/**
|
|
* Like `reduceRight`, but passes additional parameters to the predicate function. Moves through
|
|
* the input list from the right to the left.
|
|
*
|
|
* The iterator function receives four values: *(acc, value, index, list)*.
|
|
*
|
|
* Note: `R.reduceRightIndexed` does not skip deleted or unassigned indices (sparse arrays),
|
|
* unlike the native `Array.prototype.reduce` method. For more details on this behavior,
|
|
* see:
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight#Description
|
|
*
|
|
* @func
|
|
* @memberOf R
|
|
* @category List
|
|
* @sig (a,b,i,[b] -> a -> [b] -> a
|
|
* @param {Function} fn The iterator function. Receives four values: the accumulator, the
|
|
* current element from `list`, that element's index, and the entire `list` itself.
|
|
* @param {*} acc The accumulator value.
|
|
* @param {Array} list The list to iterate over.
|
|
* @return {*} The final, accumulated value.
|
|
* @deprecated since v0.15.0
|
|
* @see R.addIndex
|
|
* @example
|
|
*
|
|
* var letters = ['a', 'b', 'c'];
|
|
* var objectify = function(accObject, elem, idx, list) {
|
|
* accObject[elem] = idx;
|
|
* return accObject;
|
|
* };
|
|
*
|
|
* R.reduceRightIndexed(objectify, {}, letters); //=> { 'c': 2, 'b': 1, 'a': 0 }
|
|
*/
|
|
module.exports = _curry3(function reduceRightIndexed(fn, acc, list) {
|
|
var idx = list.length - 1;
|
|
while (idx >= 0) {
|
|
acc = fn(acc, list[idx], idx, list);
|
|
idx -= 1;
|
|
}
|
|
return acc;
|
|
});
|