Skip to content

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 属性会被删除
  • 输入可以是数组、单个对象,nullundefined 会被处理为空数组
  • 依赖 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 - 将平铺列表转换为树形结构