• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

antvis / G2Plot / 5369861486

pending completion
5369861486

push

github

hustcc
chore: update github action

2363 of 2694 branches covered (87.71%)

Branch coverage included in aggregate %.

6945 of 7093 relevant lines covered (97.91%)

530955.81 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.83
/src/utils/data.ts
1
import { filter, get, isNumber } from '@antv/util';
2
import { Data, Datum, Meta, Options } from '../types';
6,413✔
3
import { Node, NodeLinkData } from '../types/relation-data';
6,413✔
4
import { LEVEL, log } from './invariant';
6,413✔
5
import { pick } from './pick';
6,413✔
6

6,413✔
7
/**
6,413✔
8
 * 查看数据是否是全负数、或者全正数
9
 * @param data
10
 * @param field
11
 */
12
export function adjustYMetaByZero(data: Data, field: string): Meta {
13
  if (!data) return {};
14
  // 过滤出数字数据
12,868!
15
  const numberData = data.filter((datum: Datum) => {
×
16
    const v = get(datum, [field]);
17
    return isNumber(v) && !isNaN(v);
12,868✔
18
  });
253,663✔
19

253,663✔
20
  const gtZero = numberData.every((datum: Datum) => get(datum, [field]) >= 0);
21
  const ltZero = numberData.every((datum: Datum) => get(datum, [field]) <= 0);
248,394✔
22

12,868✔
23
  // 目前是增量更新,对 { min: 0, max: undefined } 进行 update({ max: 0 }) 会得到 { min: 0, max: 0 }
24
  if (gtZero) {
12,868✔
25
    return { min: 0 };
12,540✔
26
  }
27
  if (ltZero) {
328✔
28
    return { max: 0 };
88✔
29
  }
30
  return {};
240✔
31
}
32

6,413✔
33
/**
34
 * 转换数据格式为带有节点与边的数据格式
35
 * @param data
36
 * @param sourceField
37
 * @param targetField
38
 * @param weightField
39
 * @param rawFields 存放一些原数据
40
 */
41
export function transformDataToNodeLinkData(
42
  data: Data,
1,624✔
43
  sourceField: string,
1,624✔
44
  targetField: string,
34✔
45
  weightField: string,
46
  rawFields: string[] = []
47
): NodeLinkData {
48
  if (!Array.isArray(data)) {
49
    return {
50
      nodes: [],
1,590✔
51
      links: [],
52
    };
1,590✔
53
  }
1,590✔
54

55
  //   const nodes = [];
1,590✔
56
  const links = [];
39,813✔
57
  // 先使用对象方式存储
39,813✔
58
  const nodesMap: Record<string, Node> = {};
39,813✔
59
  let nodesIndex = -1;
39,813✔
60
  // 数组变换成 chord layout 的数据结构
61
  data.forEach((datum: Datum) => {
39,813✔
62
    const source = datum[sourceField];
12,453✔
63
    const target = datum[targetField];
64
    const weight = datum[weightField];
39,813✔
65

15,524✔
66
    const rawData = pick(datum, rawFields);
67

68
    // source node
39,813✔
69
    if (!nodesMap[source]) {
70
      nodesMap[source] = {
71
        id: ++nodesIndex,
72
        name: source,
73
        ...rawData,
1,590✔
74
      };
75
    }
26,413✔
76
    if (!nodesMap[target]) {
77
      nodesMap[target] = {
78
        id: ++nodesIndex,
79
        name: target,
6,413✔
80
        ...rawData,
81
      };
82
    }
83
    // links
84
    links.push({
85
      source: nodesMap[source].id,
86
      target: nodesMap[target].id,
11,508✔
87
      // sourceName: source,
53,651✔
88
      // targetName: target,
53,651✔
89
      value: weight,
90
      ...rawData,
91
    });
11,508✔
92
  });
11,508✔
93
  return {
94
    // 需要按照 id 的顺序
6,413✔
95
    nodes: Object.values(nodesMap).sort((a, b) => a.id - b.id),
96
    links,
97
  };
98
}
99

100
/**
101
 * 处理不合法的数据(过滤 非数值型 和 NaN,保留 null)
102
 * @param data
103
 * @param angleField
104
 */
105
export function processIllegalData(data: Options['data'], field: string) {
106
  const processData = filter(data, (d) => {
107
    const v = d[field];
108
    return v === null || (typeof v === 'number' && !isNaN(v));
109
  });
110

111
  // 打印异常数据情况
112
  log(LEVEL.WARN, processData.length === data.length, 'illegal data existed in chart data.');
113

114
  return processData;
115
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc