48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
function omit(row, fields) {
|
|
var data = tslib_1.__assign({}, row);
|
|
fields.forEach(function (field) {
|
|
delete data[field];
|
|
});
|
|
return data;
|
|
}
|
|
/**
|
|
* 展开数组字段
|
|
* @param rows - 数据
|
|
* @param options - 配置
|
|
*/
|
|
function flatten(rows, options) {
|
|
var fields = options.fields, _a = options.as, as = _a === void 0 ? [] : _a, index = options.index;
|
|
var targets = rows.map(function (row) { return fields.map(function (field) { return row[field]; }); });
|
|
// [
|
|
// [[1,2,3], [2,3,4]]
|
|
// ]
|
|
var newRows = rows.map(function (row) { return omit(row, fields); });
|
|
var keys = fields.map(function (item, index) { return as[index] || item; });
|
|
var result = [];
|
|
var idx = 1;
|
|
targets.forEach(function (items, rowIndex) {
|
|
// [[1,2,3], [2,3,4]]
|
|
var max = Math.max.apply(Math, tslib_1.__spread(items.map(function (item) { return item.length; })));
|
|
var _loop_1 = function (i) {
|
|
var row = tslib_1.__assign({}, newRows[rowIndex]);
|
|
keys.forEach(function (key, j) {
|
|
var item = items[j];
|
|
var length = item.length;
|
|
row[key] = i >= length ? null : item[i];
|
|
if (index)
|
|
row[index] = idx + i;
|
|
});
|
|
result.push(row);
|
|
};
|
|
for (var i = 0; i < max; i++) {
|
|
_loop_1(i);
|
|
}
|
|
idx += max;
|
|
});
|
|
return result;
|
|
}
|
|
exports.flatten = flatten;
|