树结构返回参数为:
var arr = [
{ id : 1, parentId : null , isLeaf: '0' },
{ id : 2, parentId : 1, isLeaf: '0' },
{ id : 3, parentId : 1, isLeaf: '0' },
{ id : 4, parentId : 2 , isLeaf: '1' },
{ id : 5, parentId : 4 , isLeaf: '1' },
]
目标是加载成图中的table,每个子节点跟在父节点后面
1.先将每个对象存起来
var itemDict;
arr.forEach(function(e){
itemDict[e.id] = e
})
2.需要找到规律(想了一天才想通):每个叶子节点都占一个<tr>,然后递归找到叶子节点的父,插入到叶子节点前
arr.forEach(function(items){
if (items.isLeaf == '1'){
var tempArray = ['<tr>','<td pid="'+items.parentId+'" id="'+items.id+'">'+items.id +'</td>','</tr>']
if (items.parentId && itemDict.hasOwnProperty(items.parentId)) tempArray = appendPrevTd(items.parentId,tempArray,1)
strArray.push(tempArray)
}
})
3.到的一个简单的递归方法
function appendPrevTd(pid,tempArray,index){
var item = itemDict[pid]
tempArray.splice(index,0,'<td pid="'+item.parentId+'" id="'+item.id+'">'+item.id+'</td>')
if (item.parentId && itemDict.hasOwnProperty(item.parentId)){
return appendPrevTd(item.parentId,tempArray,index)
} else return tempArray
}
4.最后只需要排一下序,调用一下很多大神都写过的合并单元格方法就完成了。