40 lines
1.5 KiB
Java
40 lines
1.5 KiB
Java
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var helper_1 = require("../helper");
|
|
var partition_1 = require("../util/partition");
|
|
var statistics = tslib_1.__importStar(require("../util/statistics"));
|
|
function pivot(rows, options) {
|
|
var e_1, _a;
|
|
var _b = helper_1.mergeOptions(options, { op: 'sum' }), field = _b.field, value = _b.value, groupBy = _b.groupBy, op = _b.op;
|
|
if (!(op in statistics)) {
|
|
throw new Error('unknown op');
|
|
}
|
|
var groups = partition_1.partition(rows, groupBy);
|
|
var result = [];
|
|
var _loop_1 = function (group) {
|
|
var row = {};
|
|
(Array.isArray(groupBy) ? groupBy : [groupBy]).forEach(function (item) { return (row[item] = group[0][item]); });
|
|
var fields = group.map(function (item) { return item[field]; });
|
|
fields.forEach(function (target) {
|
|
row[target] = statistics[op](group.filter(function (item) { return item[field] === target; }).map(function (item) { return item[value]; }));
|
|
});
|
|
result.push(row);
|
|
};
|
|
try {
|
|
for (var _c = tslib_1.__values(Object.values(groups)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
var group = _d.value;
|
|
_loop_1(group);
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
return result;
|
|
}
|
|
exports.pivot = pivot;
|