1 | var map = require('./map')
|
2 |
|
3 | var isArray = require('./isArray')
|
4 |
|
5 | function deepGetObj (obj, path) {
|
6 | var index = 0
|
7 | var len = path.length
|
8 | while (obj && index < len) {
|
9 | obj = obj[path[index++]]
|
10 | }
|
11 | return len && obj ? obj : 0
|
12 | }
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | function invoke (list, path) {
|
23 | var func
|
24 | var args = arguments
|
25 | var params = []
|
26 | var paths = []
|
27 | var index = 2
|
28 | var len = args.length
|
29 | for (; index < len; index++) {
|
30 | params.push(args[index])
|
31 | }
|
32 | if (isArray(path)) {
|
33 | len = path.length - 1
|
34 | for (index = 0; index < len; index++) {
|
35 | paths.push(path[index])
|
36 | }
|
37 | path = path[len]
|
38 | }
|
39 | return map(list, function (context) {
|
40 | if (paths.length) {
|
41 | context = deepGetObj(context, paths)
|
42 | }
|
43 | func = context[path] || path
|
44 | if (func && func.apply) {
|
45 | return func.apply(context, params)
|
46 | }
|
47 | })
|
48 | }
|
49 |
|
50 | module.exports = invoke
|