一维数组转树形结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const data = [
{id: 1, name: "1-1",},
{id: 2, name: "2-1",},
{id: 3, name: "3-1",},
{id: 4, name: "1-2", parentId: 1},
{id: 5, name: "1-3", parentId: 1},
{id: 6, name: "2-2", parentId: 2},
{id: 7, name: "2-3", parentId: 2},
{id: 8, name: "2-4", parentId: 7},
]
// 扁平化结构转树形结构
const arrayToTree = (data) => {
return data.reduce(function (prev, curr, i, arr) {
curr.children = arr.filter(item => item.parentId === curr.id)
if (!curr.parentId) {
prev.push(curr)
}
return prev;
}, []);
}
const treeData = arrayToTree(data)
console.log(JSON.stringify(treeData, null, 2))

8558467.jpg

树形结构转一维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 树形结构扁平化
const treeToArray = (data) => {
return data.reduce(function (prev, curr) {
prev.push({
id: curr.id,
name: curr.name,
parentId: curr.parentId
})
curr.children && curr.children.forEach(v => {
v.parentId = curr.id
arguments.callee(prev, v)
})
return prev;
}, [])
}
const arrData = treeToArray(treeData)
console.log(JSON.stringify(arrData, null, 2))

8558467.jpg