VUE 扁平化数据结构转换为 el-tree 树结构数据 方法封装
function flatToTree(flatData, idProp, parentIdProp) {
const treeData = []
const idMap = {}
for (const node of flatData) {
idMap[node[idProp]] = node
node.children = []
}
for (const node of flatData) {
const parent = idMap[node[parentIdProp]]
if (parent) {
parent.children.push(node)
} else {
treeData.push(node)
}
}
return treeData
}
const flatData = [
{ id: 1, name: 'Node 1', parentId: null },
{ id: 2, name: 'Node 1.1', parentId: 1 },
{ id: 3, name: 'Node 1.2', parentId: 1 },
{ id: 4, name: 'Node 1.1.1', parentId: 2 },
{ id: 5, name: 'Node 2', parentId: null },
]
const treeData = flatToTree(flatData, 'id', 'parentId')
console.log(treeData)
[
{
"id": 1,
"name": "Node 1",
"parentId": null,
"children": [
{
"id": 2,
"name": "Node 1.1",
"parentId": 1,
"children": [
{
"id": 4,
"name": "Node 1.1.1",
"parentId": 2,
"children": []
}
]
},
{
"id": 3,
"name": "Node 1.2",
"parentId": 1,
"children": []
}
]
},
{
"id": 5,
"name": "Node 2",
"parentId": null,
"children": []
}
]
function toTree(data) {
const result = []
const map = {}
data.forEach(item => {
item.children = []
map[item.id] = item
})
data.forEach(item => {
if (item.parentId === null) {
result.push(item)
} else {
const parent = map[item.parentId]
parent.children.push(item)
}
})
return result
}
function toTree(data) {
const result = []
const map = {}
data.forEach(item => {
item.children = []
map[item.id] = item
})
data.forEach(item => {
const parent = map[item.parentId]
if (parent !== null) {
parent.children.push(item)
} else {
result.push(item)
}
})
return result
}