先举例List数据
list = [
{
parentId: null,
id: '1c771a009c132342',
serviceName: '江苏'
},
{
parentId: '1c771a009c132342',
id: 'dcd7c1932576f4db',
serviceName: '南京'
},
{
parentId: '1c771a009c132342',
id: 'd780804c55dcb06c',
serviceName: '苏州'
},
{
parentId: 'd780804c55dcb06c',
id: '3333333',
serviceName: '虎丘'
},
]
树结构的数据格式
tree = [
{
parentId: null,
id: '1c771a009c132342',
serviceName: '江苏',
children: [
{
parentId: '1c771a009c132342',
id: 'dcd7c1932576f4db',
serviceName: '南京',
children: []
},
{
parentId: '1c771a009c132342',
id: 'd780804c55dcb06c',
serviceName: '苏州',
children: [
{
parentId: 'd780804c55dcb06c',
id: '3333333',
serviceName: '虎丘'
},
]
},
]
}
]
方法 直接复制粘贴
// 将后端返回的List数据转化为树结构
export const listToTree = (list) => {
let arr = []
let items = {}
let idsStr = ''
// 获取每个节点的直属子节点(是直属,不是所有子节点)
for (let i = 0; i < list.length; i++) {
let key = list[i].parentId
if (items[key]) {
items[key].push(list[i])
} else {
items[key] = []
items[key].push(list[i])
} // items里面存的是所有parentId对应的对象
// 将所有id拼在一起
idsStr += idsStr === '' ? list[i].id : ',' + list[i].id
}
for (var key in items) {
if (idsStr.indexOf(key) === -1) { // 找到最大的父节点key
arr = formatTree(items, key)
}
}
return arr
}
function formatTree(items, parentId) {
let result = []
if (!items[parentId]) {
return result
}
for (let t of items[parentId]) {
t.children = formatTree(items, t.id) // 递归获取children
result.push(t)
}
return result
}
使用
listToTree(list) // 打印出来就是树结构的数据