问题详情:如题
要求:手撕,当然如果有相关包也可以,我可以去看看源码
const data = [{
name: '000',
id: nanoid(),
child: [
{
name: '111',
id: nanoid(),
child: []
}
...
]
}]
数据类型大概类似上面这种(当然也可以是json数据),每一个元素都有唯一id标识,怎么对它进行增删改查有点头疼。。。
先把这棵树遍历一遍,把树节点拿出来生成一个扁平结构(列表),这个列表里增、改、查都可以解决,毕竟查到了,就可以改,也可以为其添加子节点。不过记得增了子节点之后,这个节点也要放在生成的这个大列表里。
如果想快速查,可以从列表生成一个映射表,用唯一 ID 做键。
如果要删,需要找到要删除的那个节点的父节点,并从其
child
数组中删除去。目前的结构只能通过遍历来查找(当然用列表查还是比较简单),如果如果加一个parentId
结合映射表,瞬间就找到了。所以最终可以建立这样一个映射表(示意):
{ id : { node, parentId } }
至于遍历树,参阅:使用递归遍历并转换树形数据(以 TypeScript 为例) - SegmentFault 思否