30 lines
1.2 KiB
Java
30 lines
1.2 KiB
Java
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var util_1 = require("@antv/util");
|
|
var statistics = tslib_1.__importStar(require("../util/statistics"));
|
|
var partition_1 = require("../util/partition");
|
|
function aggregate(rows, options) {
|
|
var fields = options.fields, op = options.op;
|
|
if (fields && !Array.isArray(fields)) {
|
|
throw new TypeError('Invalid fields: it must be an array with one or more strings!');
|
|
}
|
|
if (!fields && op.some(function (item) { return item !== 'count'; }))
|
|
throw new Error('');
|
|
if (op.length > options.as.length)
|
|
throw new TypeError("Invalid as: it's length must be the same as operations!");
|
|
var groups = partition_1.partition(rows, options.groupBy);
|
|
var results = [];
|
|
util_1.forIn(groups, function (group) {
|
|
var result = tslib_1.__assign({}, group[0]);
|
|
op.forEach(function (operation, i) {
|
|
var outputName = options.as[i];
|
|
var field = fields ? fields[i] : undefined;
|
|
result[outputName] = statistics[operation](group.map(function (item) { return item[field]; }));
|
|
});
|
|
results.push(result);
|
|
});
|
|
return results;
|
|
}
|
|
exports.aggregate = aggregate;
|