树形数据在数据库中通常是使用id
和pid
来记录:javascript
{
id: 1,
pid: 0,
name: '公司'
}
复制代码
这种数据怎么转成前端所需的树形的数据结构呢?前端
代码以下:java
var flatLs = [
{id: 1, pid: 0},
{id: 2, pid: 0},
{id: 3, pid: 0},
{id: 4, pid: 1},
{id: 5, pid: 1},
{id: 6, pid: 2},
{id: 7, pid: 3},
{id: 8, pid: 3},
{id: 9, pid: 4},
{id: 10, pid: 1}
]
var flat2tree = flatLs => {
flatLs.forEach(item => {
if (item.pid === 0) {
tree.push(item)
} else {
var index = flatLs.findIndex(item1 => item1.id === item.pid)
if (index !== -1) {
flatLs[index].children = flatLs[index].children || []
flatLs[index].children.push(item)
}
}
})
return flatLs.filter(item => item.pid === 0)
}
flat2tree(flatLs)
复制代码
这里主要利用了对象是经过引用传值的特色来处理的。所以遍历整个数组,直接修改传入的参数,最后取出全部的顶层节点的数据便可。数据中假定全部的顶级节点的
pid
都是0
。数据库