1
+ /** @format */
1
2
2
3
// 深拷贝
3
- export const deepAssign : ( to : { [ key : string ] : any } , from : { [ key : string ] : any } ) => Object = ( to , from ) => {
4
+ export const deepAssign : ( to : { [ key : string ] : any } , from : { [ key : string ] : any } ) => Object = ( to , from ) => {
4
5
Object . keys ( from ) . forEach ( key => {
5
6
const val = from [ key ]
6
7
if ( typeof val === 'object' ) {
@@ -12,7 +13,7 @@ export const deepAssign: (to: { [key: string]: any }, from: { [key: string]: any
12
13
return to
13
14
}
14
15
15
- export const deepClone : ( obj : Object ) => Object = ( obj ) => {
16
+ export const deepClone : ( obj : Object ) => Object = obj => {
16
17
if ( Array . isArray ( obj ) ) {
17
18
return obj . map ( item => deepClone ( item ) )
18
19
}
@@ -23,25 +24,25 @@ export const deepClone: (obj: Object) => Object = (obj) => {
23
24
}
24
25
25
26
// 广度优先
26
- export function treeForeach < T extends { routes ?: Array < T > } > ( tree : Array < T > , func : ( node : T ) => void ) {
27
+ export function treeForeach < T extends { routes ?: Array < T > } > ( tree : Array < T > , func : ( node : T ) => void ) {
27
28
let node
28
29
const list = [ ...tree ]
29
30
while ( ( node = list . shift ( ) ) ) {
30
31
func ( node )
31
32
node . routes && list . push ( ...node . routes )
32
33
}
33
34
}
34
- type nodeType = { [ index : string ] : any }
35
+ type nodeType = { [ index : string ] : any }
35
36
/**
36
37
* 深度优先遍历,返回节点信息及深度
37
- * @param tree
38
- * @param func
39
- * @param childrenKey
38
+ * @param tree
39
+ * @param func
40
+ * @param childrenKey
40
41
*/
41
42
export const treeDeepForeach = (
42
43
tree : Array < any > | Object ,
43
44
func : ( node : nodeType , deep : number ) => void ,
44
- childrenKey = 'children'
45
+ childrenKey = 'children' ,
45
46
) => {
46
47
let deep = 0
47
48
const each = ( node : nodeType ) => {
@@ -65,25 +66,25 @@ export const treeDeepForeach = (
65
66
/**
66
67
* @author guojianqiang
67
68
* @description 查找匹配树节点并返回当前节点信息及深度
68
- * @param tree
69
- * @param func
69
+ * @param tree
70
+ * @param func
70
71
* @param childrenKey
71
72
*/
72
73
export const findTreeNode = (
73
74
tree : Array < any > | Object ,
74
75
func : ( node : nodeType ) => boolean ,
75
- childrenKey = 'children'
76
+ childrenKey = 'children' ,
76
77
) => {
77
78
let deep = 0
78
- const find : ( node : nodeType ) => any = ( node ) => {
79
+ const find : ( node : nodeType ) => any = node => {
79
80
deep ++
80
81
if ( func ( node ) ) {
81
- return { ...node , deep }
82
+ return { ...node , deep}
82
83
}
83
84
if ( node [ childrenKey ] && node [ childrenKey ] . length ) {
84
85
for ( let item of node [ childrenKey ] ) {
85
86
const rnode = find ( item )
86
- if ( rnode ) return { ...rnode , deep }
87
+ if ( rnode ) return { ...rnode , deep}
87
88
}
88
89
}
89
90
deep --
@@ -100,15 +101,11 @@ export const findTreeNode = (
100
101
}
101
102
/**
102
103
* 树条件过滤
103
- * @param tree
104
- * @param func
105
- * @param childrenKey
104
+ * @param tree
105
+ * @param func
106
+ * @param childrenKey
106
107
*/
107
- export const filterTree = (
108
- tree : any ,
109
- func : ( node : nodeType ) => boolean ,
110
- childrenKey = 'children'
111
- ) => {
108
+ export const filterTree = ( tree : any , func : ( node : nodeType ) => boolean , childrenKey = 'children' ) => {
112
109
let _tree
113
110
if ( typeof tree !== 'object' ) {
114
111
console . warn ( 'the tree is not object' )
@@ -118,20 +115,22 @@ export const filterTree = (
118
115
_tree = [ tree ]
119
116
}
120
117
_tree = [ ...tree ]
121
- const filter : ( arr : Array < any > ) => Array < any > = ( arr ) => {
122
- return arr . map ( node => ( { ...node } ) ) . filter ( ( item ) => {
123
- if ( item [ childrenKey ] && item [ childrenKey ] . length ) item [ childrenKey ] = filter ( item [ childrenKey ] )
124
- if ( item [ childrenKey ] && ! item [ childrenKey ] . length ) delete item [ childrenKey ]
125
- return ( item [ childrenKey ] && item [ childrenKey ] ) || func ( item )
126
- } )
118
+ const filter : ( arr : Array < any > ) => Array < any > = arr => {
119
+ return arr
120
+ . map ( node => ( { ...node } ) )
121
+ . filter ( item => {
122
+ if ( item [ childrenKey ] && item [ childrenKey ] . length ) item [ childrenKey ] = filter ( item [ childrenKey ] )
123
+ if ( item [ childrenKey ] && ! item [ childrenKey ] . length ) delete item [ childrenKey ]
124
+ return ( item [ childrenKey ] && item [ childrenKey ] ) || func ( item )
125
+ } )
127
126
}
128
127
return filter ( _tree )
129
128
}
130
129
131
- type listNodeType = { parentId : number | string , id : number | string , [ key : string ] : any }
130
+ type listNodeType = { parentId : number | string ; id : number | string ; [ key : string ] : any }
132
131
/**
133
132
* 数组转树
134
- * @param list
133
+ * @param list
135
134
* @param childrenKey 孩子键
136
135
* @param parentIdKey 父id键
137
136
* @param defaultRootId 默认根级id
@@ -140,7 +139,7 @@ export const listToTree = (
140
139
list : Array < listNodeType > ,
141
140
childrenKey = 'children' ,
142
141
parentIdKey = 'parentId' ,
143
- defaultRootId = 0
142
+ defaultRootId = 0 ,
144
143
) => {
145
144
const map = list . reduce ( ( prevMap : any , current ) => {
146
145
prevMap [ current . id ] = current
@@ -156,17 +155,18 @@ export const listToTree = (
156
155
}
157
156
/**
158
157
* 树转数组
159
- * @param tree
160
- * @param childrenKey
158
+ * @param tree
159
+ * @param childrenKey
161
160
*/
162
- export const treeToList = (
163
- tree : any ,
164
- childrenKey = 'children'
165
- ) => {
161
+ export const treeToList = ( tree : any , childrenKey = 'children' ) => {
166
162
const list : Array < any > = [ ]
167
- treeDeepForeach ( tree , node => {
168
- list . push ( node )
169
- } , childrenKey )
163
+ treeDeepForeach (
164
+ tree ,
165
+ node => {
166
+ list . push ( node )
167
+ } ,
168
+ childrenKey ,
169
+ )
170
170
return list
171
171
}
172
172
@@ -197,4 +197,4 @@ export function getTreePath<T>(nodes: Array<T>, handler: (node: T) => {}, key =
197
197
return [ ]
198
198
}
199
199
return getPaths ( nodes )
200
- }
200
+ }
0 commit comments