UNPKG

@tidyjs/tidy

Version:

Tidy up your data with JavaScript, inspired by dplyr and the tidyverse

67 lines (64 loc) 1.87 kB
import { singleOrArray } from './helpers/singleOrArray.js'; function summarize(summarizeSpec, options) { const _summarize = (items) => { options = options != null ? options : {}; const summarized = {}; const keys = Object.keys(summarizeSpec); for (const key of keys) { summarized[key] = summarizeSpec[key](items); } if (options.rest && items.length) { const objectKeys = Object.keys(items[0]); for (const objKey of objectKeys) { if (keys.includes(objKey)) { continue; } summarized[objKey] = options.rest(objKey)(items); } } return [summarized]; }; return _summarize; } function _summarizeHelper(items, summaryFn, predicateFn, keys) { if (!items.length) return []; const summarized = {}; let keysArr; if (keys == null) { keysArr = Object.keys(items[0]); } else { keysArr = []; for (const keyInput of singleOrArray(keys)) { if (typeof keyInput === "function") { keysArr.push(...keyInput(items)); } else { keysArr.push(keyInput); } } } for (const key of keysArr) { if (predicateFn) { const vector = items.map((d) => d[key]); if (!predicateFn(vector)) { continue; } } summarized[key] = summaryFn(key)(items); } return [summarized]; } function summarizeAll(summaryFn) { const _summarizeAll = (items) => _summarizeHelper(items, summaryFn); return _summarizeAll; } function summarizeIf(predicateFn, summaryFn) { const _summarizeIf = (items) => _summarizeHelper(items, summaryFn, predicateFn); return _summarizeIf; } function summarizeAt(keys, summaryFn) { const _summarizeAt = (items) => _summarizeHelper(items, summaryFn, void 0, keys); return _summarizeAt; } export { summarize, summarizeAll, summarizeAt, summarizeIf }; //# sourceMappingURL=summarize.js.map