data.js 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.processIllegalData = exports.transformDataToNodeLinkData = exports.adjustYMetaByZero = void 0;
  4. var tslib_1 = require("tslib");
  5. var util_1 = require("@antv/util");
  6. var invariant_1 = require("./invariant");
  7. var pick_1 = require("./pick");
  8. /**
  9. * 查看数据是否是全负数、或者全正数
  10. * @param data
  11. * @param field
  12. */
  13. function adjustYMetaByZero(data, field) {
  14. if (!data)
  15. return {};
  16. // 过滤出数字数据
  17. var numberData = data.filter(function (datum) {
  18. var v = (0, util_1.get)(datum, [field]);
  19. return (0, util_1.isNumber)(v) && !isNaN(v);
  20. });
  21. var gtZero = numberData.every(function (datum) { return (0, util_1.get)(datum, [field]) >= 0; });
  22. var ltZero = numberData.every(function (datum) { return (0, util_1.get)(datum, [field]) <= 0; });
  23. // 目前是增量更新,对 { min: 0, max: undefined } 进行 update({ max: 0 }) 会得到 { min: 0, max: 0 }
  24. if (gtZero) {
  25. return { min: 0 };
  26. }
  27. if (ltZero) {
  28. return { max: 0 };
  29. }
  30. return {};
  31. }
  32. exports.adjustYMetaByZero = adjustYMetaByZero;
  33. /**
  34. * 转换数据格式为带有节点与边的数据格式
  35. * @param data
  36. * @param sourceField
  37. * @param targetField
  38. * @param weightField
  39. * @param rawFields 存放一些原数据
  40. */
  41. function transformDataToNodeLinkData(data, sourceField, targetField, weightField, rawFields) {
  42. if (rawFields === void 0) { rawFields = []; }
  43. if (!Array.isArray(data)) {
  44. return {
  45. nodes: [],
  46. links: [],
  47. };
  48. }
  49. // const nodes = [];
  50. var links = [];
  51. // 先使用对象方式存储
  52. var nodesMap = {};
  53. var nodesIndex = -1;
  54. // 数组变换成 chord layout 的数据结构
  55. data.forEach(function (datum) {
  56. var source = datum[sourceField];
  57. var target = datum[targetField];
  58. var weight = datum[weightField];
  59. var rawData = (0, pick_1.pick)(datum, rawFields);
  60. // source node
  61. if (!nodesMap[source]) {
  62. nodesMap[source] = tslib_1.__assign({ id: ++nodesIndex, name: source }, rawData);
  63. }
  64. if (!nodesMap[target]) {
  65. nodesMap[target] = tslib_1.__assign({ id: ++nodesIndex, name: target }, rawData);
  66. }
  67. // links
  68. links.push(tslib_1.__assign({ source: nodesMap[source].id, target: nodesMap[target].id,
  69. // sourceName: source,
  70. // targetName: target,
  71. value: weight }, rawData));
  72. });
  73. return {
  74. // 需要按照 id 的顺序
  75. nodes: Object.values(nodesMap).sort(function (a, b) { return a.id - b.id; }),
  76. links: links,
  77. };
  78. }
  79. exports.transformDataToNodeLinkData = transformDataToNodeLinkData;
  80. /**
  81. * 处理不合法的数据(过滤 非数值型 和 NaN,保留 null)
  82. * @param data
  83. * @param angleField
  84. */
  85. function processIllegalData(data, field) {
  86. var processData = (0, util_1.filter)(data, function (d) {
  87. var v = d[field];
  88. return v === null || (typeof v === 'number' && !isNaN(v));
  89. });
  90. // 打印异常数据情况
  91. (0, invariant_1.log)(invariant_1.LEVEL.WARN, processData.length === data.length, 'illegal data existed in chart data.');
  92. return processData;
  93. }
  94. exports.processIllegalData = processIllegalData;
  95. //# sourceMappingURL=data.js.map