Blame view

node_modules/lodash/overArgs.js 1.58 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  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;