You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							31 lines
						
					
					
						
							875 B
						
					
					
				
			
		
		
	
	
							31 lines
						
					
					
						
							875 B
						
					
					
				var restArguments = require('./restArguments.js');
 | 
						|
var isFunction = require('./isFunction.js');
 | 
						|
var map = require('./map.js');
 | 
						|
var _deepGet = require('./_deepGet.js');
 | 
						|
var _toPath = require('./_toPath.js');
 | 
						|
 | 
						|
// Invoke a method (with arguments) on every item in a collection.
 | 
						|
var invoke = restArguments(function(obj, path, args) {
 | 
						|
  var contextPath, func;
 | 
						|
  if (isFunction(path)) {
 | 
						|
    func = path;
 | 
						|
  } else {
 | 
						|
    path = _toPath(path);
 | 
						|
    contextPath = path.slice(0, -1);
 | 
						|
    path = path[path.length - 1];
 | 
						|
  }
 | 
						|
  return map(obj, function(context) {
 | 
						|
    var method = func;
 | 
						|
    if (!method) {
 | 
						|
      if (contextPath && contextPath.length) {
 | 
						|
        context = _deepGet(context, contextPath);
 | 
						|
      }
 | 
						|
      if (context == null) return void 0;
 | 
						|
      method = context[path];
 | 
						|
    }
 | 
						|
    return method == null ? method : method.apply(context, args);
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
module.exports = invoke;
 |