这个方法好像有问题
来源:9-5 -把一个数组转换为树
入门级全栈专家
2022-02-28
数组转树,如果过arr里面的id顺序不是123456,而是乱序的话,按这个方法children插入就有问题了吧?
写回答
2回答
-
起点丶
2022-06-25
// 这样写就不怕顺序问题了,不过要两次循环,先准备 map 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 convert(arr) { const idToTreeNode = new Map() // id 和 treeNode 的映射,方便通过 id 找到对应 treeNode let tree = null // 首次循环填充 map arr.forEach(item => { const { id, name } = item const treeNode = { id, name } idToTreeNode.set(id, treeNode) }) // 遍历数组,找到父节点,添加 children arr.forEach(item => { const { id, parentId } = item const parentNode = idToTreeNode.get(parentId) if (parentNode) { if (parentNode.children == null) parentNode.children = [] parentNode.children.push(idToTreeNode.get(id)) } else { tree = idToTreeNode.get(id) } }) return tree } console.log(convert(arr))
042022-07-01 -
双越
2022-02-28
是的。如果输入不符合预期,那就得调整算法,有了本节的讲解,调整起来也不麻烦。
00
相似问题