Files
lodash/.internal/composeArgs.js
Michał Lipiński 2538a56577 Math them all.
2017-04-04 22:38:50 +02:00

39 lines
1.2 KiB
JavaScript

/**
* Creates an array that is the composition of partially applied arguments,
* placeholders, and provided arguments into a single array of arguments.
*
* @private
* @param {Array} args The provided arguments.
* @param {Array} partials The arguments to prepend to those provided.
* @param {Array} holders The `partials` placeholder indexes.
* @params {boolean} [isCurried] Specify composing for a curried function.
* @returns {Array} Returns the new array of composed arguments.
*/
function composeArgs(args, partials, holders, isCurried) {
const argsLength = args.length
const holdersLength = holders.length
const leftLength = partials.length
let argsIndex = -1
let leftIndex = -1
let rangeLength = Math.max(argsLength - holdersLength, 0)
const result = new Array(leftLength + rangeLength)
const isUncurried = !isCurried
while (++leftIndex < leftLength) {
result[leftIndex] = partials[leftIndex]
}
while (++argsIndex < holdersLength) {
if (isUncurried || argsIndex < argsLength) {
result[holders[argsIndex]] = args[argsIndex]
}
}
while (rangeLength--) {
result[leftIndex++] = args[argsIndex++]
}
return result
}
export default composeArgs