UNPKG

iter-tools-es

Version:
43 lines (35 loc) 831 B
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;