数据扁平化:
let objArr = [
{
id: 1,
name: '部门1',
children: [
{
id: 2,
name: '部门2',
children: []
},
{
id: 3,
name: '部门3',
children: [
{
id: 4,
name: '部门4',
children: [
{
id: 5,
name: '部门5',
children: []
}
]
}
]
}
]
}
]
let result = []
const flattenArr = (arr, curArr, pid) => {
let tempArr = arr.reduce((pre, cur) => {
pre.push({
id: cur?.id,
name: cur?.name,
pid: pid
})
cur.children?.length &&
arr.forEach((i) => {
flattenArr(i.children, curArr, i.id)
})
return pre
}, [])
curArr.push(...tempArr)
}
flattenArr(objArr, result, 0)
console.log(result)
//结果
[
{ id: 5, name: '部门5', pid: 4 },
{ id: 4, name: '部门4', pid: 3 },
{ id: 2, name: '部门2', pid: 1 },
{ id: 3, name: '部门3', pid: 1 },
{ id: 1, name: '部门1', pid: 0 }
]
数组数据树形化:
let arr = [
{ id: 5, name: '部门5', pid: 4 },
{ id: 4, name: '部门4', pid: 3 },
{ id: 2, name: '部门2', pid: 1 },
{ id: 3, name: '部门3', pid: 1 },
{ id: 1, name: '部门1', pid: 0 }
]
const arrToTree = (arr, pid) => {
let result = []
handleArr(arr, result, pid)
return result
}
const handleArr = (arr, result, pid) => {
for (const item of arr) {
if (item.pid == pid) {
let newObj = { ...item, children: [] }
result.push(newObj)
handleArr(arr, newObj.children, item.id)
}
}
}
console.log(JSON.stringify(arrToTree(arr, 0)))
//结果
[
{
"id": 1,
"name": "部门1",
"pid": 0,
"children": [
{
"id": 2,
"name": "部门2",
"pid": 1,
"children": []
},
{
"id": 3,
"name": "部门3",
"pid": 1,
"children": [
{
"id": 4,
"name": "部门4",
"pid": 3,
"children": [
{
"id": 5,
"name": "部门5",
"pid": 4,
"children": []
}
]
}
]
}
]
}
]