treeCutLevel
treeCutLevel方法用于裁剪树形结构到指定层级,返回一棵新的树,不会修改原始树数据。
语法
javascript
treeCutLevel(treeLike, level)描述
treeCutLevel 函数会将输入的树形结构裁剪到指定的层级深度,返回裁剪后的新树。level 参数从 1 开始计数:level=1 表示只保留根节点(删除所有 children),level=2 表示保留根节点及其直接子节点,以此类推。
该函数内部会先调用 treeSafe() 将输入统一转换为数组格式,然后根据 level 的值进行裁剪。对于 level=1 的特殊情况,函数会浅拷贝根节点并删除其 children 属性,避免影响原数据;对于 level>1 的情况,会使用 ramda 的 clone 进行深拷贝,确保原树结构完全不被修改。
注意事项
level从 1 开始计数,level<=0时返回空数组level=1时只保留根节点,并移除其children属性- 函数不会修改原始树数据,返回的是新的树结构
- 当指定的层级超过树的实际深度时,函数会提前终止遍历,返回实际能达到的最深层级
- 裁剪后位于目标层级的最末端节点的
children属性会被删除 - 输入可以是数组、单个对象,
null或undefined会被处理为空数组 - 依赖 ramda 的
clone函数进行深拷贝
示例
基本用法
不同层级裁剪对比
浏览器兼容
treeCutLevel 使用了现代 JavaScript 特性(解构赋值、扩展运算符等),需要支持 ES6 的浏览器环境:
- Chrome 51+
- Firefox 52+
- Safari 10+
- Edge 15+
不支持 IE 浏览器。
性能考虑
- 时间复杂度: O(n) - 其中 n 是裁剪层级内的节点总数
- 空间复杂度: O(n) - 需要存储裁剪后的新树结构
- 对于
level=1的情况使用浅拷贝,性能较高 - 对于
level>1的情况使用 ramda 的clone进行深拷贝,会有一定的性能开销 - 如果输入树非常大且只需浅层裁剪,建议优先使用
level=1
相关函数
treeFind- 在树形结构中查找满足条件的第一个节点treeFilter- 筛选树形结构中的节点treeMap- 对树形结构中的每个节点应用变换函数tree2List- 将树形结构转换为平铺列表list2Tree- 将平铺列表转换为树形结构