UNPKG

1.6 kBJavaScriptView Raw
1import { __assign, __values } from "tslib";
2import * as statistics from './util/statistics';
3import { partition } from './util/partition';
4import { assert } from './util/helper';
5/**
6 *
7 * @param rows - 数据
8 * @param options - 参数
9 *
10 * @public
11 */
12export function aggregate(rows, options) {
13 var e_1, _a;
14 var fields = options.fields, op = options.op;
15 fields && assert(Array.isArray(fields), "Invalid fields: it must be an array with one or more strings!");
16 !fields &&
17 assert(op.every(function (item) { return item === 'count'; }), "operations must all be 'count' when fields is empty");
18 assert(op.length === options.as.length, "Invalid as: it's length must be the same as operations!");
19 var groups = partition(rows, options.groupBy);
20 var results = [];
21 var _loop_1 = function (group) {
22 var result = __assign({}, group[0]);
23 op.forEach(function (operation, i) {
24 var outputName = options.as[i];
25 var field = fields ? fields[i] : undefined;
26 result[outputName] = statistics[operation](field ? group.map(function (item) { return item[field]; }) : group);
27 });
28 results.push(result);
29 };
30 try {
31 for (var _b = __values(Object.values(groups)), _c = _b.next(); !_c.done; _c = _b.next()) {
32 var group = _c.value;
33 _loop_1(group);
34 }
35 }
36 catch (e_1_1) { e_1 = { error: e_1_1 }; }
37 finally {
38 try {
39 if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
40 }
41 finally { if (e_1) throw e_1.error; }
42 }
43 return results;
44}