给定一个数组结构,使用map 生成过一个树形结构

思路:

1、遍历数组结构
2、给每个元素,生成 tree node
3、找到parentNode, 并加入它的children
js 复制代码
const arr = [
    { id: 1, name: "部门A", parentId: 0 },
    { id: 2, name: "部门B", parentId: 1 },
    { id: 3, name: "部门C", parentId: 1 },
    { id: 4, name: "部门D", parentId: 2 },
    { id: 5, name: "部门E", parentId: 2 },
    { id: 6, name: "部门F", parentId: 3 },
]

function toTree(arr) {
    const idToTreeNode = new Map()
    let root = null
    arr.forEach(item => {
        const { id, name, parentId } = item
        // 定义tree node 并加入map
        const treeNode = { id, name }
        idToTreeNode.set(id, treeNode)
        // 找到parentNode 并加入到它的children
        const parentNode = idToTreeNode.get(parentId)
        if (parentNode) {
            if (parentNode.children == null) parentNode.children = []
            parentNode.children.push(treeNode)
        }
        if (parentId === 0) root = treeNode
    })
    return root
}

const show = toTree(arr)
console.log('show', show)
相关推荐
C_心欲无痕1 分钟前
前端页面中,如何让用户回到上次阅读的位置
前端
C_心欲无痕9 分钟前
前端本地开发构建和更新的过程
前端
Mintopia14 分钟前
🌱 一个小而美的核心团队能创造出哪些奇迹?
前端·人工智能·团队管理
蚊道人18 分钟前
Nuxt 4 学习文档
前端·vue.js
悠哉摸鱼大王20 分钟前
前端音视频学习(一)- 基本概念
前端
stella·27 分钟前
后端二进制文件,现代前端如何下载
前端·ajax·状态模式·axios·request·buffer·download
奋斗猿28 分钟前
Less vs Scss 全解析:从语法到实战的前端样式预处理器指南
前端
Web - Anonymous31 分钟前
使用Vue3 + Elementplus + Day.js 实现日期选择器(包括日、周、月、年、自定义) - 附完整示例
前端·javascript·vue.js
冴羽33 分钟前
2025 年 HTML 年度调查报告亮点速览!
前端·javascript·html
张元清34 分钟前
浏览器硬导航优化:提升用户体验的关键
前端·javascript·面试