Skip to content

dim2Tree

dim2Tree方法将多维度数据(维表)直接转换为树形结构。内部依次调用 dim2Listlist2Tree 完成转换。

语法

javascript
dim2Tree(dimList, dimLink, dimMap)

描述

dim2Tree 是一个组合函数,用于将多维度数据(维表)直接转换为具有层级关系的树形结构。该函数内部首先调用 dim2List 将维度数据转换为带有父子关系的平铺节点列表,然后再调用 list2Tree 将平铺列表组装为树形结构。

这种设计将"维度数据 → 平铺列表 → 树形结构"的转换流程封装为一个简单的调用,适用于需要直接从数据库查询结果(如地区信息、组织架构、产品分类)生成前端树形控件的场景。

由于内部调用了 dim2Listlist2Tree,时间复杂度为 O(m × k) + O(n),其中 m 是 dimList 的长度,k 是 dimLink 的长度,n 是去重后的节点数量。

注意事项

  • 三个参数都必须提供,且 dimListdimLink 必须是数组,dimMap 必须是对象,否则会返回空数组
  • dimLink 中的维度名称必须与 dimMap 的键对应,否则该维度会被忽略
  • 顶层节点的 parentIddim2List 阶段会被设置为 '-1',因此 list2Tree 会将其识别为根节点
  • 内部使用 uniqBy 对节点按 id 去重,确保每个 ID 只对应一个节点
  • 节点的 id 由当前层级及之前所有层级的编码连接而成,保证唯一性
  • 该函数依赖 ramda 的 uniqBy 函数

示例

基本用法

三级层级结构

浏览器兼容

dim2Tree 内部使用了现代 JavaScript 特性(Map、解构赋值等),需要支持 ES6 的浏览器环境:

  • Chrome 51+
  • Firefox 52+
  • Safari 10+
  • Edge 15+

不支持 IE 浏览器。

性能考虑

  • 时间复杂度: O(m × k) + O(n) - 其中 m 是 dimList 的长度,k 是 dimLink 的长度,n 是去重后的节点数量
  • 空间复杂度: O(n) - 需要存储中间列表和最终的树形结构
  • 内部调用 dim2Listlist2Tree,两个函数均使用 Map 进行快速查找
  • 对于大型数据集,建议先对数据进行预处理或分页,避免一次性处理过多数据
  • 由于去重操作的存在,输入数据中存在重复维度组合时不会产生重复节点

相关函数