tree的数据操作小建议

在前端处理tree的时候的一个小建议


在处理tree这种数据结构的时候,最经常用的一种方法就是递归,但是递归又比较消耗性能,如何在操作
树形结构的数据时候,更方便,提一个方法

把 tree转换成hash,降低操作成本,不用每次递归。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var obj = {};
obj.tree = [
{
id: 1,
name: '1',
children: [
{
id: 11,
name: '11'
},
{
id: 12,
name: '12'
}
]
}
]
//每次递归操作这一个树,麻烦,消耗性能,怎么办? 把这个tree 转换成一个hash
obj.createHash = function (source) {
if (!source || !source.length) {
return
}
for (var i = source.length - 1; i >= 0; i--) {
this.dataHash[source[i].id] = source[i];
this._createHash(source[i].children);
}
}
//转换成hash
obj.createHash(this.tree);
//操作某一个节点的时候
var node = obj.dataHash[id];
node.name = xxx; //hash 里存的是 tree节点的引用,这样操作,也会同步到tree的数据里

上面是个大概的伪代码,提供思想。


作者 [@sha Qihe]

2017 年 4月 19日