Spaces:
Runtime error
Runtime error
var apply = require('./_apply'), | |
arrayMap = require('./_arrayMap'), | |
baseFlatten = require('./_baseFlatten'), | |
baseIteratee = require('./_baseIteratee'), | |
baseRest = require('./_baseRest'), | |
baseUnary = require('./_baseUnary'), | |
castRest = require('./_castRest'), | |
isArray = require('./isArray'); | |
/* Built-in method references for those with the same name as other `lodash` methods. */ | |
var nativeMin = Math.min; | |
/** | |
* Creates a function that invokes `func` with its arguments transformed. | |
* | |
* @static | |
* @since 4.0.0 | |
* @memberOf _ | |
* @category Function | |
* @param {Function} func The function to wrap. | |
* @param {...(Function|Function[])} [transforms=[_.identity]] | |
* The argument transforms. | |
* @returns {Function} Returns the new function. | |
* @example | |
* | |
* function doubled(n) { | |
* return n * 2; | |
* } | |
* | |
* function square(n) { | |
* return n * n; | |
* } | |
* | |
* var func = _.overArgs(function(x, y) { | |
* return [x, y]; | |
* }, [square, doubled]); | |
* | |
* func(9, 3); | |
* // => [81, 6] | |
* | |
* func(10, 5); | |
* // => [100, 10] | |
*/ | |
var overArgs = castRest(function(func, transforms) { | |
transforms = (transforms.length == 1 && isArray(transforms[0])) | |
? arrayMap(transforms[0], baseUnary(baseIteratee)) | |
: arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee)); | |
var funcsLength = transforms.length; | |
return baseRest(function(args) { | |
var index = -1, | |
length = nativeMin(args.length, funcsLength); | |
while (++index < length) { | |
args[index] = transforms[index].call(this, args[index]); | |
} | |
return apply(func, this, args); | |
}); | |
}); | |
module.exports = overArgs; | |