给定一个数组结构,使用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)
相关推荐
sigernet5 分钟前
Claude Code 不再推荐 npm 安装:官方改为 Native Installer
前端·npm·node.js
lxh01139 分钟前
函数防抖题解
前端·javascript·算法
我发现一个问题15 分钟前
node+ts+koa全栈框架学习-1
前端
sure28218 分钟前
React Native中自定义TabBar
前端·react native·react.js
bluceli21 分钟前
CSS自定义属性与主题切换:构建动态UI的终极方案
前端·css
默默学前端21 分钟前
HTML 高频面试题 5 道|吃透基础,面试不慌(附详细解析)
前端·面试·职场和发展·html5
豆芽包22 分钟前
前端性能优化-图片懒加载技术
前端·面试
bluceli23 分钟前
JavaScript WeakMap与WeakSet:内存优化的秘密武器
前端·javascript
陆枫Larry24 分钟前
折叠屏“窗口化”下的全屏背景图错位:一次小程序适配的排障思路与最小改动修复
前端
陆枫Larry25 分钟前
Art Direction(艺术导向适配)
前端