现有数据如下
var tree = {
id: 0,
pid: -1,
name: '0',
children: [
{ id: 1, pid: 0, name: '1' },
{ id: 2, pid: 0, name: '2' },
{
id: 3, pid: 0, name: '3', children: [
{ id: 4, pid: 3, name: '4', children: [...] },
{ id: 5, pid: 3, name: '5', children: [...] }
]
}
.
.
.
]
}
id是唯一标识符,生成时可以用new Date().getTime()替代
需求:1.任意一个节点都可以插入新的子节点;2.任意一个节点都可以删除(可以只删掉本节点,也可以连同子节点一起删除);
有什么好的算法去操作这个数据对象呢?
你可以将目前的这个数据结构打平,每个节点都压入数组
arr
中,之前的children
改为保留对应子节点id
的数组,然后数组arr
按照id
排序,这样通过第一个节点(根节点)的children
就可以遍历出所有子节点。插入节点只需根据id
插入到arr
对应的位置(插入排序即可),删除节点只需根据id
找到节点,递归遍历子节点全部从arr
中删除即可。由于数组有序,查找单个节点可以简单的用二分法快速找到。