iter-tools-es
Version:
The iterable toolbox
43 lines (35 loc) • 831 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
__peekerate
} = require('../$peekerate/peekerate.js');
function __reduce(iterable, reducer, initial = undefined) {
let c = 0;
let result = initial;
const peekr = __peekerate(iterable);
try {
if (initial === undefined) {
if (peekr.done) {
throw new Error('Cannot reduce: no initial value specified and iterable was empty');
}
result = peekr.value;
peekr.advance();
c = 1;
}
while (!peekr.done) {
result = reducer(result, peekr.value, c++);
peekr.advance();
}
return result;
} finally {
peekr.return();
}
}
exports.__reduce = __reduce;
const reduce = /*#__PURE__*/iterableCurry(__reduce, {
reduces: true,
minArgs: 1,
maxArgs: 2
});
exports.reduce = reduce;