给定一个数组结构,使用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)
相关推荐
dodod20122 分钟前
Ubuntu24.04.3执行sudo apt install yarnpkg 命令失败的原因
java·服务器·前端
小魏的马仔8 分钟前
【elementui】el-date-picker日期选择框,获取焦点后宽度增加问题调整
前端·vue.js·elementui
JarvanMo11 分钟前
想让你的 Flutter UI 更上一层楼吗?
前端
soul g18 分钟前
npm 包发布流程
前端·npm·node.js
踢球的打工仔28 分钟前
jquery的基本使用(5)
前端·javascript·jquery
开发者小天30 分钟前
react中的useDebounceEffect用法
前端·react.js·前端框架
想自律的露西西★31 分钟前
js.39. 组合总和
前端·javascript·数据结构·算法
ttod_qzstudio34 分钟前
事件冒泡踩坑记:一个TDesign Checkbox引发的思考
前端·javascript·vue.js·tdesign
IT_陈寒37 分钟前
Vue3性能优化实战:这7个技巧让我的应用加载速度提升40%
前端·人工智能·后端
Reuuse37 分钟前
登录突然失效:Axios 拦截器判空、localStorage 脏数据与环境变量踩坑
开发语言·前端