Skip to content

树形工具 ​

从 @axewo/fin-core/utils 或根入口导入。节点使用 id、parentId、children 三个字段,业务编码可在进入工具前映射;不要求使用科目业务类型。

ts
import { listToTree, findTreeNode, filterTree, getNodePath, treeToList } from '@axewo/fin-core/utils'
import type { TreeNode } from '@axewo/fin-core/utils'

interface Department extends TreeNode { name: string }
const nodes: Department[] = [
  { id: 'a', name: '总部' },
  { id: 'b', parentId: 'a', name: '财务部' },
]
const tree = listToTree(nodes)
const found = findTreeNode(tree, node => node.id === 'b')
const path = getNodePath(tree, 'b') // 总部、财务部
const filtered = filterTree(tree, node => node.name.includes('财务'))
const flat = treeToList(tree)
API行为
listToTree(list, rootId = null)复制节点构建树,缺失父节点时作为根节点
treeToList(tree)深度优先转列表,返回节点移除 children
findTreeNode(tree, predicate)返回首个匹配节点,找不到返回 null
getNodePath(tree, targetId)根节点到目标节点的路径,找不到返回空数组
filterTree(tree, predicate)返回新树,保留匹配节点与祖先
getLeafNodes(tree)返回叶子节点列表

输入应保证 id 唯一、层级无循环。查找函数返回原节点引用,过滤和转换会创建新节点。当前没有 findNode、mapTree、traverseTree、flattenTree 等旧文档中的导出。