Skip to content

list2Tree

list2Tree方法可以将普通的平铺结构对象数组转化为树结构。

语法

javascript
list2Tree(list, extendProps)

描述

list2Tree方法会根据id和parentId两个属性构建children属性。该函数支持自定义字段名,允许用户指定不同的id、children和parentId字段名。时间复杂度为O(n),其中n是输入数组的长度。

参数

list array
  平铺数据的数组,每个元素应包含标识符(id)和父级标识符(parentId)字段。

extendProps object (可选)

  扩展配置对象,用于自定义字段名:

  • id: 指定ID字段名,默认为 'id'
  • children: 指定子节点字段名,默认为 'children'
  • parentId: 指定父ID字段名,默认为 'parentId'
  • useConcat: 是否使用concat方式添加子节点,默认为 false

返回值

array

  返回一个树结构数组,包含根节点(即没有父节点的节点)。

注意事项

  • 如果输入数组中的元素缺少id字段,函数会输出警告并直接返回原始数组
  • 函数内部会自动清理空的children数组,以保持数据整洁
  • 为了提高性能,函数使用Map数据结构建立ID到节点的映射,时间复杂度为O(n)
  • 如果useConcat为false,函数会在开始时清空所有节点的children字段,防止重复叠加调用

示例

基本用法

自定义字段名

复杂层级结构

浏览器兼容

此功能在所有现代浏览器中都受支持,因为它不依赖任何特定于浏览器的API。

性能考虑

  • 时间复杂度:O(n),其中n是输入数组的长度
  • 空间复杂度:O(n),用于存储节点映射和结果树
  • 函数使用Map数据结构来优化节点查找过程,避免嵌套循环导致的O(n²)复杂度
  • 对于大型数据集,这种实现方式能够有效处理而不会显著影响性能

相关函数

  • tree2List - 将树形结构转换为平铺数组
  • treeFind - 在树形结构中查找节点
  • treeMap - 对树形结构中的每个节点执行操作
  • dim2List - 将多维度数据转换为平铺列表
  • dim2Tree - 将多维度数据转换为树形结构