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.
41 lines
1.4 KiB
41 lines
1.4 KiB
var apply = require('./_apply'), |
|
baseEach = require('./_baseEach'), |
|
baseInvoke = require('./_baseInvoke'), |
|
baseRest = require('./_baseRest'), |
|
isArrayLike = require('./isArrayLike'); |
|
|
|
/** |
|
* Invokes the method at `path` of each element in `collection`, returning |
|
* an array of the results of each invoked method. Any additional arguments |
|
* are provided to each invoked method. If `path` is a function, it's invoked |
|
* for, and `this` bound to, each element in `collection`. |
|
* |
|
* @static |
|
* @memberOf _ |
|
* @since 4.0.0 |
|
* @category Collection |
|
* @param {Array|Object} collection The collection to iterate over. |
|
* @param {Array|Function|string} path The path of the method to invoke or |
|
* the function invoked per iteration. |
|
* @param {...*} [args] The arguments to invoke each method with. |
|
* @returns {Array} Returns the array of results. |
|
* @example |
|
* |
|
* _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); |
|
* // => [[1, 5, 7], [1, 2, 3]] |
|
* |
|
* _.invokeMap([123, 456], String.prototype.split, ''); |
|
* // => [['1', '2', '3'], ['4', '5', '6']] |
|
*/ |
|
var invokeMap = baseRest(function(collection, path, args) { |
|
var index = -1, |
|
isFunc = typeof path == 'function', |
|
result = isArrayLike(collection) ? Array(collection.length) : []; |
|
|
|
baseEach(collection, function(value) { |
|
result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); |
|
}); |
|
return result; |
|
}); |
|
|
|
module.exports = invokeMap;
|
|
|