percent.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.getDataWhetherPercentage = exports.getDeepPercent = exports.percent = void 0;
  4. var tslib_1 = require("tslib");
  5. var util_1 = require("@antv/util");
  6. var number_1 = require("../number");
  7. /**
  8. * 对数据进行百分比化
  9. * @param data
  10. * @param measure
  11. * @param groupField
  12. * @param as
  13. */
  14. function percent(data, measure, groupField, as) {
  15. // 1. 先计算每一个分组的 max 值
  16. var sumMap = (0, util_1.reduce)(data, function (map, datum) {
  17. var groupValue = datum[groupField];
  18. var sum = map.has(groupValue) ? map.get(groupValue) : 0;
  19. var v = datum[measure];
  20. sum = (0, number_1.isRealNumber)(v) ? sum + v : sum;
  21. map.set(groupValue, sum);
  22. return map;
  23. }, new Map());
  24. // 2. 循环数组,计算占比
  25. return (0, util_1.map)(data, function (datum) {
  26. var _a;
  27. var v = datum[measure];
  28. var groupValue = datum[groupField];
  29. var percentage = (0, number_1.isRealNumber)(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;
  30. return tslib_1.__assign(tslib_1.__assign({}, datum), (_a = {}, _a[as] = percentage, _a));
  31. });
  32. }
  33. exports.percent = percent;
  34. /**
  35. * 对数据进行深层百分比化
  36. * @param data
  37. * @param measure // 数值
  38. * @param fields // 需要分组的 field值
  39. * @param as // 存储percent 百分比的值
  40. */
  41. function getDeepPercent(data, measure, fields, percent) {
  42. var sumMap = (0, util_1.reduce)(data, function (map, datum) {
  43. // 获取分组得到的枚举key值
  44. var groupValue = (0, util_1.reduce)(fields, function (value, field) { return "".concat(value).concat(datum[field]); }, '');
  45. var sum = map.has(groupValue) ? map.get(groupValue) : 0;
  46. var v = datum[measure];
  47. sum = (0, number_1.isRealNumber)(v) ? sum + v : sum;
  48. map.set(groupValue, sum);
  49. return map;
  50. }, new Map());
  51. // 2. 循环数组,计算占比
  52. return (0, util_1.map)(data, function (datum) {
  53. var _a;
  54. var v = datum[measure];
  55. // 获取分组得到的枚举key值
  56. var groupValue = (0, util_1.reduce)(fields, function (value, field) { return "".concat(value).concat(datum[field]); }, '');
  57. var percentage = (0, number_1.isRealNumber)(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;
  58. return tslib_1.__assign(tslib_1.__assign({}, datum), (_a = {}, _a[percent] = percentage, _a));
  59. });
  60. }
  61. exports.getDeepPercent = getDeepPercent;
  62. /**
  63. * 获取数据,如果是百分比,进行数据转换 (适用于面积图、柱状图、条形图)
  64. * @param isPercent 是否百分比
  65. */
  66. function getDataWhetherPercentage(data, yField, groupField, asField, isPercent) {
  67. return !isPercent ? data : percent(data, yField, groupField, asField);
  68. }
  69. exports.getDataWhetherPercentage = getDataWhetherPercentage;
  70. //# sourceMappingURL=percent.js.map