当前位置: 首页 > 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.dtcms.com/a/319805.html

相关文章:

  • [激光原理与应用-172]:测量仪器 - 能量(焦耳)与功率(瓦)的图示比较
  • 14-netty基础-手写rpc-提供方(服务端)-06
  • Java NIO 核心原理与秋招高频面试题解析
  • day28-NFS
  • iOS混淆工具使用,后续维护与版本升级中实用的混淆策略
  • 代码随想录day58图论8
  • windows操作系统定时关机、重启指令记录
  • 一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)
  • 进程间数据的关联与隔离
  • 管家婆软件如何设置默认税率?
  • AI创新中心从“空间集聚”到“生态共生”
  • 代码库详细笔记
  • P1690 贪婪的 Copy
  • [airplay2] airplay2简略介绍
  • 前端全局注册知识【持续更新】
  • 二分查找算法,并分析其时间、空间复杂度
  • IIS7.5下的https无法绑定主机头,显示灰色如何处理?
  • [ java SE ] 多人聊天窗口1.0
  • 强光干扰下裂缝漏检率↓82%!陌讯轻量化模型在道路巡检的落地实践
  • 2深度学习Pytorch-自动微分--梯度计算、梯度上下文控制(累计梯度、梯度清零)
  • Ethereum: 像Uniswap V3贡献者一样开发,克隆、编译与测试v3-core
  • 通过减少回表和增加冗余字段,优化SQL查询效率
  • LSTM 单变量时序预测—pytorch
  • vscode+latex本地英文期刊环境配置
  • VScode使用jupyter notebook,配置内核报错没有torch解决
  • 如何委托第三方检测机构做软件测试?
  • 鸿蒙 - 分享功能
  • 直播预告|鸿蒙生态下的 Flutter 开发实战
  • 非化学冷却塔水处理解决方案:绿色工业时代的革新引擎
  • Elasticsearch 文档分词器