版权声明:本文为博主原创文章,未经博主允许不得转载。

废话不多说,先上代码:
loadFilter:function(content){
let bufferData = {};// 缓存数据
let node = null;
let parentNode = null;
for (let i = 0; i < content.length; i++) {
node = content[i];//当前节点
parentNode = bufferData[node.parentId];//父节点
if (parentNode == undefined) { // 如果在树结构数据中不存在父节点则创建一个
parentNode = bufferData[node.parentId] = {children: []};
}
if (node.leaf == false) {
if (bufferData[node.id] == undefined){
node.children = []; //如果自己的位置上没有代替者则增加一个未来装载子节点的容器
}else
node.children = bufferData[node.id].children;//如果有代理者证明有子节点在自身之前被遍历,将代理者搜集的内容拷贝过来
bufferData[node.id] = node;//剔除代理者
}
parentNode.children.push(node);
}
return [content[0]]
},
返回的数据需要有自身 id ,父节点 parentId 叶子节点的判断 leaf
原始数据:
[
{"id":1,"parentId":-1,"leaf":0,"text":"班级"},
{"id":2,"parentId":1,"leaf":0,"text":"班长"},
{"id":3,"parentId":1,"leaf":0,"text":"副班长"},
{"id":4,"parentId":2,"leaf":1,"text":"学生A"},
{"id":5,"parentId":2,"leaf":1,"text":"学生B"},
{"id":6,"parentId":3,"leaf":1,"text":"学生C"}
]
转换后的数据:
[
{
"id":1,
"parentId":-1,
"leaf":0,
"text":"班级",
"children":[
{
"id":2,
"parentId": 1,
"leaf":0,
"text":"班长",
"children":[
{
"id":4,
"parentId":2,
"leaf":1,
"text":"学生A"
},{
"id":5,
"parentId":2,
"leaf":1,
"text":"学生B"
}
]
},
{
"id":3,
"parentId":1,
"leaf":0,
"text":"副班长",
"children":[
{
"id":6,
"parentId":3,
"leaf":1,
"text":"学生C"
}
]
}
]
}
]