mirror of
				https://github.com/taixingyiji/openit.git
				synced 2025-11-04 14:32:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 |