dim2List
dim2List方法可以将多维度数据转换为带有层级关系的平铺列表,用于构建树形结构。
语法
javascript
dim2List(dimList, dimLink, dimMap)描述
dim2List方法将多维度数据转换为带有层级关系的平铺列表,用于构建树形结构。该函数接受三个参数:维度数据源、维度关联关系和维度映射配置,然后按照指定的层级结构生成具有父子关系的节点列表。时间复杂度为O(m × k),其中m是dimList的长度,k是dimLink的长度。
此函数特别适用于处理层次化的数据,如地区信息(国家→省→市→区)、组织架构、产品分类等。
参数
dimList array
维度数据源,包含各个维度信息的对象数组。每个对象应包含不同层级的标识符和显示文本字段。
dimLink array
维度关联关系,按层级顺序排列的维度名称数组。决定了数据的层级顺序和父子关系。
dimMap object
维度映射配置,定义各维度的属性字段。该对象的键是dimLink中的维度名称,值是包含propFieldName(属性字段名)和textFieldName(文本字段名)的对象。
返回值
array返回一个数组,包含转换后的节点对象,每个节点包含 id、parentId、label、value 属性,可用于进一步构建树形结构。
注意事项
- 输入的dimList必须是数组格式,否则返回空数组
- dimLink也必须是数组格式,否则返回空数组
- dimMap必须是对象格式,否则返回空数组
- 函数内部会对生成的节点进行去重处理,确保每个ID只对应一个节点
- 顶层节点的父ID会被设置为'-1'
- 如果没有有效的字段配置,函数会返回空数组
- 生成的节点ID由当前层级及之前所有层级的编码连接而成
示例
实时示例
浏览器兼容
由于使用了现代JavaScript特性(如Map、箭头函数、解构赋值等),该函数需要支持ES6特性的浏览器环境。具体包括:
- Chrome 51+
- Firefox 52+
- Safari 10+
- Edge 15+
不支持 IE 浏览器。
性能考虑
- 时间复杂度: O(m × k),其中m是dimList的长度,k是dimLink的长度
- 空间复杂度: O(n),其中n是输出的节点数量
- 内部使用Map进行快速查找,提高了处理效率
- 通过uniqBy函数对结果进行去重,确保数据的唯一性
- 对于大型数据集,建议在必要时进行分页或懒加载处理
相关函数
- list2Tree - 将平铺列表转换为树形结构
- tree2List - 将树形结构转换为平铺列表
- dim2Tree - 将维度数据直接转换为树形结构(内部使用dim2List和list2Tree)
- treeFilter - 过滤树形结构中的节点
- treeFind - 在树形结构中查找特定节点