arquero
Version:
Query processing and transformation of array-backed data tables.
24 lines (19 loc) • 653 B
JavaScript
import { aggregateGet } from './reduce/util.js';
import { _unroll } from './unroll.js';
import { parseValue } from './util/parse.js';
export function fold(table, values, options) {
return _fold(table, parseValue('fold', table, values), options);
}
export function _fold(table, { names = [], exprs = [], ops = [] }, options = {}) {
if (names.length === 0) return table;
const [k = 'key', v = 'value'] = options.as || [];
const vals = aggregateGet(table, ops, exprs);
return _unroll(
table,
{
names: [k, v],
exprs: [() => names, (row, data) => vals.map(fn => fn(row, data))]
},
{ ...options, drop: names }
);
}