UNPKG

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