当前位置: 首页 > news >正文

【JS】扁平树数据转为树结构

扁平数据

在这里插入图片描述

转为最终效果

在这里插入图片描述

[{"label":"疼逊有限公司","code":"1212","disabled":false,"parentId":"none","children":[{"label":"财务部","code":"34343","disabled":false,"parentId":"1212"},{"label":"人事部","code":"43434","disabled":false,"parentId":"1212"},{"label":"经营 部","code":"53543","disabled":false,"parentId":"1212","children":[{"label":"市场部","code":"23232","disabled":true,"parentId":"53543"},{"label":"销售部","code":"3435435","disabled":false,"parentId":"53543"}]}]}]

/*** 删除子级数据为空的子级* @param {[]} node * @param {string} [childKey='children'] 子级字段 默认-children* @returns {[]}*/
const removeNoneDataChildren = (node, childKey = 'children') => {const remove = nodeItem => {if (nodeItem[childKey] && nodeItem[childKey].length === 0) {delete nodeItem[childKey];} else if (nodeItem[childKey]) {nodeItem[childKey].forEach(remove);}}node.forEach(remove);return node
}/*** 扁平数据转树结构* @param {[]} flatList 扁平化树的数据* @param {String} [idKey="id"] 主字段 默认-id* @param {String} [parentKey="parentId"] 父级字段 默认-parentId* @param {string} [childKey='children'] 子级字段 默认-children* @param {boolean} [delNoneDataChildren=true] 删除子级数据为空的子级 默认-true* @returns {[]}*/
const buildTree = (flatList, idKey = 'id', parentKey = 'parentId', childKey = 'children', delNoneDataChildren = true) => {const map = {};const roots = [];flatList.forEach(item => {map[item[idKey]] = { ...item, [childKey]: [] };});flatList.forEach(item => {const itemId = item[idKey];const parentId = item[parentKey];if (parentId !== null && map[parentId]) {map[parentId][childKey].push(map[itemId]);} else {roots.push(map[itemId]);}});if (delNoneDataChildren) return removeNoneDataChildren(roots, childKey);return roots;
}// 使用
const test =[{label:'疼逊有限公司',code:'1212',disabled:false,parentId:'none'},{label:'财务部',code:'34343',disabled:false,parentId:'1212'},{label:'人事部',code:'43434',disabled:false,parentId:'1212'},{label:'经营部',code:'53543',disabled:false,parentId:'1212'},{label:'市场部',code:'23232',disabled:true,parentId:'53543'},{label:'销售部',code:'3435435',disabled:false,parentId:'53543'}];
// 使用自定义字段
const tree = buildTree(test, 'code', 'parentId', 'children');
console.log("1 ~ tree:", JSON.stringify(tree))
http://www.lryc.cn/news/613561.html

相关文章:

  • 蓝桥杯----数码管、按键、定时器与中断
  • 【感知机】感知机(perceptron)学习算法的收敛性
  • 代码随想录算法训练营 Day20
  • Redis面试精讲 Day 13:Redis Cluster集群设计与原理
  • P1037 [NOIP 2002 普及组] 产生数
  • NFS 服务器
  • Docker容器强制删除及文件系统修复完整指南
  • mysql的InnoDB索引总结
  • 传统防火墙与下一代防火墙
  • 中介效应分析 原理解释 实例分析
  • python中的集合
  • 移动端录屏需求调研:以小熊录屏为例的轻量级实现方案
  • 线程池创建线程
  • jmeter要如何做接口测试?
  • Jmeter使用第一节-认识面板(Mac版)
  • 【线性代数】5特征值和特征向量
  • Vue3获取当前页面相对路径
  • 站在Vue的角度,对比鸿蒙开发中的状态管理
  • Casrel关系抽取
  • vue3 el-select 加载触发
  • AI绘画:生成唐初李世民全身像提示词
  • 【unity实战】使用Unity程序化生成3D随机地牢(附项目源码)
  • 8.3.1 注册服务中心Etcd
  • 【感知机】感知机(perceptron)学习算法的对偶形式
  • Java包装类详解与应用指南
  • Caffeine 三种过期策略详解
  • Day 6: CNN卷积神经网络 - 计算机视觉的核心引擎
  • MCU中的USB
  • 论文解读:单个标点符号如何欺骗LLM,攻破AI评判系统
  • Linux总线,设备和驱动关系以及匹配机制解析