| 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
 | | // @ts-nocheck |  | /* eslint-disable */ |  |   |  | function helperCreateTreeFunc(handle) { |  |   return function (obj, iterate, options, context) { |  |     const opts = options || {}; |  |     const optChildren = opts.children || 'children'; |  |     return handle(null, obj, iterate, context, [], [], optChildren, opts); |  |   }; |  | } |  |   |  | function searchTreeItem( |  |   parentAllow, |  |   parent, |  |   obj, |  |   iterate, |  |   context, |  |   path, |  |   node, |  |   parseChildren, |  |   opts |  | ) { |  |   let paths, nodes, rest, isAllow, hasChild; |  |   const rests = []; |  |   const hasOriginal = opts.original; |  |   const sourceData = opts.data; |  |   const mapChildren = opts.mapChildren || parseChildren; |  |   if (obj) { |  |     obj.forEach(function (item, index) { |  |       paths = path.concat(['' + index]); |  |       nodes = node.concat([item]); |  |       isAllow = parentAllow || iterate.call(context, item, index, obj, paths, parent, nodes); |  |       hasChild = parseChildren && item[parseChildren]; |  |       if (isAllow || hasChild) { |  |         if (hasOriginal) { |  |           rest = item; |  |         } else { |  |           rest = Object.assign({}, item); |  |           if (sourceData) { |  |             rest[sourceData] = item; |  |           } |  |         } |  |         rest[mapChildren] = searchTreeItem( |  |           isAllow, |  |           item, |  |           item[parseChildren], |  |           iterate, |  |           context, |  |           paths, |  |           nodes, |  |           parseChildren, |  |           opts |  |         ); |  |         if (isAllow || rest[mapChildren].length) { |  |           rests.push(rest); |  |         } |  |       } else if (isAllow) { |  |         rests.push(rest); |  |       } |  |     }); |  |   } |  |   return rests; |  | } |  |   |  | /** |  |  * 从树结构中根据回调查找数据 |  |  * |  |  * @param {Object} obj 对象/数组 |  |  * @param {Function} iterate(item, index, items, path, parent, nodes) 回调 |  |  * @param {Object} options {children: 'children'} |  |  * @param {Object} context 上下文 |  |  * @return {Array} |  |  */ |  | export const searchTree = helperCreateTreeFunc(function ( |  |   parent, |  |   obj, |  |   iterate, |  |   context, |  |   path, |  |   nodes, |  |   parseChildren, |  |   opts |  | ) { |  |   return searchTreeItem(0, parent, obj, iterate, context, path, nodes, parseChildren, opts); |  | }); | 
 |