给定一个数组结构,使用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)
相关推荐
x***3816几秒前
Go-Gin Web 框架完整教程
前端·golang·gin
晓得迷路了6 分钟前
栗子前端技术周刊第 108 期 - npm 沙虫攻击 2.0、Ant Design 6.0、Playwright 1.57...
前端·javascript·css
执笔论英雄10 分钟前
【RL】async原理
java·服务器·前端
kirk_wang10 分钟前
Flutter 桌面/Web 开发:用 MouseRegion 打造原生级交互体验
前端·flutter·交互
西洼工作室19 分钟前
原生js实现前端国际化
前端·javascript
aha-凯心20 分钟前
React 中没有 v-model,如何优雅地处理表单输入
前端·javascript·vue.js·react.js
lcc18723 分钟前
Vue3 其它Composition API
前端·vue.js
tsumikistep23 分钟前
【前后端】Vue 基本使用方式(下)—— 条件渲染、双向绑定、事件绑定
前端·javascript·vue.js
雨雨雨雨雨别下啦25 分钟前
【从0开始学前端】TypeScript语法总结
前端·typescript
敲敲了个代码35 分钟前
一天面了6个前端开发,水平真的令人堪忧啊
前端·javascript·学习·面试·webpack·typescript·前端框架