【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.pswp.cn/news/917925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917925.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構4-棧、隊列

摘要:本文系統介紹了棧和隊列兩種基礎數據結構。棧采用"先進后出"原則,分為順序棧和鏈式棧,詳細說明了壓棧、出棧等基本操作及其實現方法。隊列遵循"先進先出"規則,同樣分為順序隊列和鏈式隊列,重…

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

視頻匯聚系統EasyCVR調用設備錄像保活時視頻流不連貫問題解決方案

在使用EasyCVR過程中,有用戶反饋調用設備錄像保活功能時,出現視頻流不連貫的情況。針對這一問題,我們經過排查與測試,整理出如下解決步驟,供開發者參考:具體解決步驟1)先調用登錄接口完成鑒權確…

【保姆級喂飯教程】python基于mysql-connector-python的數據庫操作通用封裝類(連接池版)

目錄項目環境一、db_config.py二、mysql_executor.py三、test/main.py在使用mysql-connector-python連接MySQL數據庫的時候,如同Java中的jdbc一般,每條sql需要創建和刪除連接,很自然就想到寫一個抽象方法,但是找了找沒有官方標準的…

【MCP服務】藍耘元生代 | 藍耘MCP平臺來襲!DeepSeek MCP服務器玩轉大模型集成

【作者主頁】Francek Chen 【專欄介紹】???人工智能與大模型應用??? 人工智能(AI)通過算法模擬人類智能,利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡(如ChatGPT&#xff09…

Spring Boot 整合 Minio 實現高效文件存儲解決方案(本地和線上)

文章目錄前言一、配置1.配置文件:application.yml2.配置類:MinioProperties3.工具類:MinioUtil3.1 初始化方法3.2 核心功能3.3 關鍵技術點二、使用示例1.控制器類:FileController2.服務類3.效果展示總結前言 Minio 是一個高性能的…

【Unity3D實例-功能-鏡頭】第三人稱視覺-鏡頭優化

這一篇我們一起來調整一下Cinemachine的第三人稱視覺的鏡頭設置。一般用于ARPG角色扮演游戲的場景中。Unity里頭,這種視角簡直就是標配。來吧,咱們一起研究研究怎么調出這種視角效果!目錄:1.調整虛擬攝像機的Y軸2.調整虛擬攝像機的…

二叉樹算法之【中序遍歷】

目錄 LeetCode-94題 LeetCode-94題 給定一個二叉樹的根節點root&#xff0c;返回它的中序遍歷結果。 class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result new ArrayList<>();order(root, result);return res…

Android14的QS面板的加載解析

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java QS 面板的創建 getNotificationShadeWindowView()&#xff1a;整個systemui的最頂級的視圖容器&#xff08;super_notification_shade.xml&#xff09;R.id.qs_frame &…

解鎖webpack核心技能(二):配置文件和devtool配置指南

一、配置文件webpack 提供的 cli 支持很多的參數&#xff0c;例如 --mode 。在我們平時的開發過程中&#xff0c;我們要學習很多的功能&#xff0c;這些很多都是可以用參數來完成的。那么后邊就會導致參數越來越多&#xff0c;我們使用命令特別的不方便&#xff0c;所以我們會使…

Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水線

一、前言 DevOps是一種將開發&#xff08;Development&#xff09;和運維&#xff08;Operations&#xff09;相結合的軟件開發方法論。它通過自動化和持續交付的方式&#xff0c;將軟件開發、測試和部署等環節緊密集成&#xff0c;以提高效率和產品質量。在本篇博客中&#xf…

【Linux】特效爆滿的Vim的配置方法 and make/Makefile原理

一、軟件包管理器 1、Linux下安裝軟件的常見方式&#xff1a; 1&#xff09;源代碼安裝——不推薦。 2&#xff09;rpm包安裝——不推薦。 3&#xff09;包管理器安裝——推薦 2、安裝軟件命令 # Centos$ sudo yum install -y lrzsz# Ubuntu$ sudo apt install -y lrzsz 3、卸…

Spring Boot Actuator 監控功能的簡介及禁用

Spring Boot Actuator: Production-ready Features 1. 添加依賴 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> </dependencie…

Matlab(1)

一、基本操作1. matlab四則運算規則&#xff1a;先乘除后加減&#xff0c;從左到右2、對數和指數的表示sin(pi^0.5)log(tan(1))exp&#xff08;sin&#xff08;10&#xff09;&#xff09;3、類型&#xff1a;matlab變量默認為double4、who&whos&#xff1a;命令行輸入who&…

Kotlin Android 開發腳手架封裝

Kotlin Android 開發腳手架封裝&#xff08;模塊化版本&#xff09; 我將按照模塊化設計原則&#xff0c;將腳手架拆分為多個文件&#xff0c;每個文件負責特定功能領域&#xff1a; 1. 核心初始化模塊 文件路徑: core/AppScaffold.kt object AppScaffold {lateinit var contex…

Flutter 報錯解析:No TabController for TabBar 的完整解決方案

目錄 Flutter 報錯解析&#xff1a;No TabController for TabBar 的完整解決方案 一、錯誤場景&#xff1a;當 TabBar 失去 "指揮官" 二、為什么 TabBar 必須依賴 Controller&#xff1f; 1. TabBar 與 TabController 的協作關系 2. 狀態管理的核心作用 3. 實戰…

【24】C++實戰篇——【 C++ 外部變量】 C++多個文件共用一個枚舉變量,外部變量 extern,枚舉外部變量 enum

文章目錄1 方法2 外部變量 應用2.1 普通外部全局變量2.2 枚舉外部全局變量 應用2.2.2 枚舉外部變量優化c多個文件中如何共用一個全局變量 c頭文件的使用和多個文件中如何共用一個全局變量 C共享枚舉類型給QML 1 方法 ①頭文件中 聲明外部全局變量&#xff1b; ②在頭文件對…

Linux SELinux 核心概念與管理

Linux SELinux 核心概念與管理一、SELinux 基本概念 SELinux 即安全增強型 Linux&#xff08;Security-Enhanced Linux&#xff09;&#xff0c;由美國國家安全局&#xff08;NSA&#xff09;開發&#xff0c;是一套基于強制訪問控制&#xff08;MAC&#xff09;的安全機制&…

Git 中**未暫存**和**未跟蹤**的區別:

文件狀態分類 Git 中的文件有以下幾種狀態&#xff1a; 工作區文件狀態&#xff1a; ├── 未跟蹤 (Untracked) ├── 已跟蹤 (Tracked)├── 未修改 (Unmodified) ├── 已修改未暫存 (Modified/Unstaged)└── 已暫存 (Staged)1. 未跟蹤 (Untracked) 定義&#xff1a;Gi…

前端1.0

目錄 一、 什么是前端 二、 HTML 1.0 概述 2.0 注釋 三、開發環境的搭建 1.0 插件 2.0 筆記 四、 常見標簽&#xff08;重點&#xff09; 四、案例展示&#xff08;圖片代碼&#xff09; 五、CSS引入 一、 什么是前端 web前端 用來直接給用戶呈現一個一個的網頁 …