symmetric.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var _ = require("@antv/util");
  5. var adjust_1 = require("./adjust");
  6. var Symmetric = /** @class */ (function (_super) {
  7. tslib_1.__extends(Symmetric, _super);
  8. function Symmetric() {
  9. return _super !== null && _super.apply(this, arguments) || this;
  10. }
  11. Symmetric.prototype.process = function (groupDataArray) {
  12. var mergeData = _.flatten(groupDataArray);
  13. var _a = this, xField = _a.xField, yField = _a.yField;
  14. // 每个 x 值对应的 最大值
  15. var cache = this.getXValuesMaxMap(mergeData);
  16. // 所有数据的最大的值
  17. var max = Math.max.apply(Math, Object.keys(cache).map(function (key) { return cache[key]; }));
  18. return _.map(groupDataArray, function (dataArray) {
  19. return _.map(dataArray, function (data) {
  20. var _a, _b;
  21. var yValue = data[yField];
  22. var xValue = data[xField];
  23. // 数组处理逻辑
  24. if (_.isArray(yValue)) {
  25. var off_1 = (max - cache[xValue]) / 2;
  26. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) { return off_1 + y; }), _a));
  27. }
  28. // 非数组处理逻辑
  29. var offset = (max - yValue) / 2;
  30. return tslib_1.__assign(tslib_1.__assign({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));
  31. });
  32. });
  33. };
  34. // 获取每个 x 对应的最大的值
  35. Symmetric.prototype.getXValuesMaxMap = function (mergeData) {
  36. var _this = this;
  37. var _a = this, xField = _a.xField, yField = _a.yField;
  38. // 根据 xField 的值进行分组
  39. var groupDataArray = _.groupBy(mergeData, function (data) { return data[xField]; });
  40. // 获取每个 xField 值中的最大值
  41. return _.mapValues(groupDataArray, function (dataArray) { return _this.getDimMaxValue(dataArray, yField); });
  42. };
  43. Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {
  44. // 所有的 value 值
  45. var dimValues = _.map(mergeData, function (data) { return _.get(data, dim, []); });
  46. // 将数组打平(dim value 有可能是数组,比如 stack 之后的)
  47. var flattenValues = _.flatten(dimValues);
  48. // 求出数组的最大值
  49. return Math.max.apply(Math, flattenValues);
  50. };
  51. return Symmetric;
  52. }(adjust_1.default));
  53. exports.default = Symmetric;
  54. //# sourceMappingURL=symmetric.js.map