Appearance
树形工具
从 @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 等旧文档中的导出。