1
This commit is contained in:
50
20220330_Vote/Ewide.Web.Entry/wwwroot/lib/xe-utils/invoke.js
Normal file
50
20220330_Vote/Ewide.Web.Entry/wwwroot/lib/xe-utils/invoke.js
Normal file
@@ -0,0 +1,50 @@
|
||||
var map = require('./map')
|
||||
|
||||
var isArray = require('./isArray')
|
||||
|
||||
function deepGetObj (obj, path) {
|
||||
var index = 0
|
||||
var len = path.length
|
||||
while (obj && index < len) {
|
||||
obj = obj[path[index++]]
|
||||
}
|
||||
return len && obj ? obj : 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 在list的每个元素上执行方法,任何传递的额外参数都会在调用方法的时候传递给它
|
||||
*
|
||||
* @param {Array} list
|
||||
* @param {Array/String/Function} path
|
||||
* @param {...Object} arguments
|
||||
* @return {Array}
|
||||
*/
|
||||
function invoke (list, path) {
|
||||
var func
|
||||
var args = arguments
|
||||
var params = []
|
||||
var paths = []
|
||||
var index = 2
|
||||
var len = args.length
|
||||
for (; index < len; index++) {
|
||||
params.push(args[index])
|
||||
}
|
||||
if (isArray(path)) {
|
||||
len = path.length - 1
|
||||
for (index = 0; index < len; index++) {
|
||||
paths.push(path[index])
|
||||
}
|
||||
path = path[len]
|
||||
}
|
||||
return map(list, function (context) {
|
||||
if (paths.length) {
|
||||
context = deepGetObj(context, paths)
|
||||
}
|
||||
func = context[path] || path
|
||||
if (func && func.apply) {
|
||||
return func.apply(context, params)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = invoke
|
||||
Reference in New Issue
Block a user