左边是树,右边是树形表格,右边的表格展示左边树的勾选项,表格每行的顺序都是可以在本层级进行调整,不一定按左边树的顺序,新勾选的直接插入本层级的末尾,取消勾选的要从表格中删除。
不知道表达清楚没有,目前的做法是构建每个树节点的节点路径数组,然后遍历数组一层一层往里算。
求更好的方法,谢谢。
1
sillydaddy 2022-03-25 09:21:59 +08:00 via Android
大家都没有回复,应该是没看懂你的表述。。
|
2
waiaan OP @sillydaddy
就是勾选左边的节点,把这个节点插入到右边的表格对应层级的位置,取消勾选则要从表格中删除。 |
3
sillydaddy 2022-03-25 13:03:49 +08:00
不知道你用的什么界面库构造的表格,我能想到的比「遍历数组一层一层往里算」稍微好点的办法是,用 map 或者 dictionary ,根据待操作节点的父节点 id ,找到这个父节点在表格中对应的那行,然后执行添加或者删除操作。能这样做的前提还得是,能用 map 或 dictionary 保存表格的各行。
我感觉节点路径数组也不错啊,react-sortable-tree 就是用的节点路径数组。标题「树比对的算法」跟这个也差太多了吧。 |
4
waiaan OP @sillydaddy
感谢。 两边的数据结构都是这种树形结构 ```js [{ id: 1, label: '一级 1', children: [{ id: 4, label: '二级 1-1', children: [{ id: 9, label: '三级 1-1-1' }, { id: 10, label: '三级 1-1-2' }] }] }] ``` 差不多就是树比对的意思,右边的项与左边勾选的项进行比较,多的删除,少的添加。 |
5
Gav1nw 2022-04-04 04:31:58 +08:00
在我印象里,树的便利,用递归实现效果更好吧?我能想到是递归+NLR 算法
|