UNPKG

@thi.ng/transducers

Version:

Collection of ~170 lightweight, composable transducers, reducers, generators, iterators for functional data transformations

48 lines (47 loc) 982 B
import { __iter, iterator } from "./iterator.js"; function partition(...args) { const iter = __iter(partition, args, iterator); if (iter) { return iter; } let size = args[0], all, step; if (typeof args[1] == "number") { step = args[1]; all = args[2]; } else { step = size; all = args[1]; } return ([init, complete, reduce]) => { let buf = []; let skip = 0; return [ init, (acc) => { if (all && buf.length > 0) { acc = reduce(acc, buf); buf = []; } return complete(acc); }, (acc, x) => { if (skip <= 0) { if (buf.length < size) { buf.push(x); } if (buf.length === size) { acc = reduce(acc, buf); buf = step < size ? buf.slice(step) : []; skip = step - size; } } else { skip--; } return acc; } ]; }; } export { partition };