NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/xe-utils/methods/array/invoke.js
2023-09-14 14:47:11 +08:00

51 lines
1.1 KiB
Java

var map = require('./map')
var isArray = require('../base/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