time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

_composeArgs.js (1323B)


      1 /* Built-in method references for those with the same name as other `lodash` methods. */
      2 var nativeMax = Math.max;
      3 
      4 /**
      5  * Creates an array that is the composition of partially applied arguments,
      6  * placeholders, and provided arguments into a single array of arguments.
      7  *
      8  * @private
      9  * @param {Array} args The provided arguments.
     10  * @param {Array} partials The arguments to prepend to those provided.
     11  * @param {Array} holders The `partials` placeholder indexes.
     12  * @params {boolean} [isCurried] Specify composing for a curried function.
     13  * @returns {Array} Returns the new array of composed arguments.
     14  */
     15 function composeArgs(args, partials, holders, isCurried) {
     16   var argsIndex = -1,
     17       argsLength = args.length,
     18       holdersLength = holders.length,
     19       leftIndex = -1,
     20       leftLength = partials.length,
     21       rangeLength = nativeMax(argsLength - holdersLength, 0),
     22       result = Array(leftLength + rangeLength),
     23       isUncurried = !isCurried;
     24 
     25   while (++leftIndex < leftLength) {
     26     result[leftIndex] = partials[leftIndex];
     27   }
     28   while (++argsIndex < holdersLength) {
     29     if (isUncurried || argsIndex < argsLength) {
     30       result[holders[argsIndex]] = args[argsIndex];
     31     }
     32   }
     33   while (rangeLength--) {
     34     result[leftIndex++] = args[argsIndex++];
     35   }
     36   return result;
     37 }
     38 
     39 module.exports = composeArgs;