UNPKG

1.14 kBJavaScriptView Raw
1var map = require('./map')
2
3var isArray = require('./isArray')
4
5function 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 * 在list的每个元素上执行方法,任何传递的额外参数都会在调用方法的时候传递给它
16 *
17 * @param {Array} list
18 * @param {Array/String/Function} path
19 * @param {...Object} arguments
20 * @return {Array}
21 */
22function 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
50module.exports = invoke