data.js 2.9 KB

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