Skip to content

Commit bc521b4

Browse files
committed
fix: improve node processing logic and prevent null errors
1 parent 7584d0e commit bc521b4

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

js/tree-v1/tree-node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,7 @@ export class TreeNode {
14051405
// 使用栈实现深度优先遍历,避免递归调用栈溢出
14061406
while (stack.length > 0) {
14071407
const node = stack.pop();
1408+
if (!node) continue;
14081409
list.push(node);
14091410
if (Array.isArray(node.children) && node.children.length > 0) {
14101411
for (let i = node.children.length - 1; i >= 0; i--) {

js/tree-v1/tree-store.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -930,30 +930,31 @@ export class TreeStore {
930930
// 所在判断过滤条件是否存在之前,就要调用这里的清理逻辑
931931
// 不想在每次渲染时都做这个清空判断
932932
// 所以判断一下之前是否有进行过滤
933-
allNodes.forEach((node: TreeNode) => {
933+
for (let i = 0; i < allNodes.length; i++) {
934+
const node = allNodes[i];
934935
// 先清空所有锁定状态
935936
if (node.vmIsLocked) {
936937
// lock 方法内部有状态计算
937938
// 所以要减少 lock 方法调用次数
938939
node.lock(false);
939940
}
940-
});
941+
}
941942
}
942943

943944
const currentFilter = config.filter;
944945
// 当前没有过滤器
945946
// 则无需处理锁定节点
946947
if (!currentFilter || !isFunction(currentFilter)) return;
947-
this.prevFilter = config.filter;
948+
this.prevFilter = currentFilter;
948949

950+
// 数据量大时,for 比 forEach 性能更好
949951
// 全部节点要经过排序,才能使用这个遍历
950952
// 比起每个过滤节点调用 getParents 方法检查父节点状态
951953
// 复杂度 O(N*log(N)) => O(N)
952-
allNodes.reverse().forEach((node: TreeNode) => {
953-
// 数组颠倒后,等于是从每个节点的子节点开始判断
954-
// 想象为从展开树的最底部向上遍历
954+
for (let i = allNodes.length - 1; i >= 0; i--) {
955+
const node = allNodes[i];
955956
const parent = node.getParent();
956-
if (!parent) return;
957+
if (!parent) continue;
957958
if (node.vmIsRest || node.vmIsLocked) {
958959
// 当前节点被过滤条件命中
959960
// 或者当前节点被锁定
@@ -964,7 +965,7 @@ export class TreeStore {
964965
parent.lock(true);
965966
}
966967
}
967-
});
968+
}
968969
}
969970
}
970971

0 commit comments

Comments
 (0)