-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcoding.js
More file actions
89 lines (83 loc) · 1.95 KB
/
coding.js
File metadata and controls
89 lines (83 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
let arr = [
{id: 1, name: '部门1', pid: 0},
{id: 2, name: '部门2', pid: 1},
{id: 3, name: '部门3', pid: 1},
{id: 4, name: '部门4', pid: 3},
{id: 5, name: '部门5', pid: 4},
{id: 6, name: '部门6', pid: 0}
]
var tree = [
{
"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": []
}
]
}
]
}
]
},
{
"id": 6,
"name": "部门6",
"pid": 0,
"children": []
}
]
// 扁平数据转 tree
function getTree (arr = []) {
return arr.map(cur => {
const children = arr.filter(item => item.pid === cur.id)
if (children.length) {
getTree(children)
}
cur.children = children
return cur
}).filter(item => item.pid === 0)
}
const res = getTree(arr)
console.log(res)
// tree 转扁平数组
function treeToArray (tree = [], ret = []) {
var res = []
tree.map(cur => {
if (cur.children.length) {
var _res = treeToArray(cur.children, ret)
res = res.concat(_res)
}
const { id, name, pid } = cur
ret.push({ id, name, pid })
res.push({ id, name, pid })
return cur
})
return res.sort((a, b) => a.id - b.id)
}
const ret = []
treeToArray(tree, ret)
const _ret = treeToArray(tree)
ret.sort((a, b) => a.id - b.id)
console.log('ret\n', ret)
console.log('_ret\n', _ret)