1.扁平数组转换树结构
const arr = [{
id: 1,
name: 'name1'
},
{
id: 2,
name: 'name2',
pid: 4
},
{
id: 3,
name: 'name3',
pid: 2
},
{
id: 4,
name: 'name4',
pid: 1
}
]
function arrayToTree(arr) {
if (!Array.isArray(arr)) return []
let obj = {}
arr.forEach(ele => obj[ele.id] = ele)
let result = []
arr.forEach(ele => {
let parent = obj[ele.pid]
if (parent) {
parent.children = parent.children || []
parent.children.push(ele)
} else {
result.push(ele)
}
})
return result
}
2.树结构转换扁平数组
const tree = [{
id: 1,
name: "name1",
children: [{
id: 4,
name: "name4",
pid: 1,
children: [{
id: 2,
name: "name2",
pid: 4,
children: [{
id: 3,
name: "name3",
pid: 2
}]
}]
}]
}]
function treeToArray(tree) {
let result = []
tree.forEach(ele => {
const { children, ...item } = ele
if (children && children.length) {
result = result.concat(treeToArray(children))
}
result.push(item)
})
return result
}