2797. 带有占位符的部分函数 🔒
2797. 带有占位符的部分函数 🔒
题目
Given a function fn and an array args, return a function partialFn.
Placeholders "_" in the args should be replaced with values from restArgs starting from index 0. Any remaining values in the restArgs should be added at the end of the args.
partialFn should return a result of fn. fn should be called with the elements of the modified args passed as separate arguments.
Example 1:
Input: fn = (...args) => args, args = [2,4,6], restArgs = [8,10]
Output: [2,4,6,8,10]
Explanation:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // [2,4,6,8,10]There are no placeholders "_" in args therefore restArgs is just added at the end of args. Then the elements of the args are passed as separate arguments to fn, which returns passed arguments as an array.
Example 2:
Input: fn = (...args) => args, args = [1,2,"",4,"",6], restArgs = [3,5]
Output: [1,2,3,4,5,6]
Explanation:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // [1,2,3,4,5,6]Placeholders "_" are replaced with values from the restArgs. Then the elements of the args are passed as separate arguments to fn, which returns passed arguments as an array.
Example 3:
Input: fn = (a, b, c) => b + a - c, args = ["_", 5], restArgs = [5, 20]
Output: -10
Explanation:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // -10Placeholder "_" is replaced with 5 and 20 is added at the end of args. Then the elements of the args are passed as separate arguments to fn, which returns -10 (5 + 5 - 20).
Constraints:
fnis a functionargsandrestArgsare valid JSON arrays1 <= args.length <= 5 * 10^41 <= restArgs.length <= 5 * 10^40 <= number of placeholders <= restArgs.length
题目大意
给定函数 fn 和数组 args,返回一个函数 partialFn。
args 中的占位符 "_" 需要用 restArgs 中索引从 0 开始的值替换。 restArgs 中剩余的值则添加到 args 的末尾。
partialFn 应该返回 fn 的结果。fn 应该使用修改后的 args 的元素作为单独的参数调用。
示例 1:
输入: fn = (...args) => args, args = [2,4,6], restArgs = [8,10]
输出:[2,4,6,8,10]
解释:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // [2,4,6,8,10]args 中没有占位符 "_",因此 restArgs 只是添加到 args 的末尾。然后将 args 的元素作为单独的参数传递给 fn,fn 返回传递的参数作为数组。
示例 2:
输入: fn = (...args) => args, args = [1,2,"",4,"",6], restArgs = [3,5]
输出:[1,2,3,4,5,6]
解释:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // [1,2,3,4,5,6]占位符 "_" 被 restArgs 中的值替换。然后将 args 的元素作为单独的参数传递给 fn,fn 返回传递的参数作为数组。
示例 3:
输入: fn = (a, b, c) => b + a - c, args = ["_", 5], restArgs = [5, 20]
输出: -10
解释:
const partialFn = partial(fn, args); const result = partialFn(...restArgs); console.log(result); // -10占位符 "_" 被替换为 5,并将 20 添加到 args 的末尾。然后将 args 的元素作为单独的参数传递给 fn,fn 返回 -10(5 + 5 - 20)。
提示:
fn是一个函数args和restArgs都是有效的 JSON 数组1 <= args.length <= 5 * 10^41 <= restArgs.length <= 5 * 10^40 <= number of placeholders <= restArgs.length
解题思路
为了实现这个 partialFn,可以按照以下步骤处理 args 数组中的占位符 "_",然后将 restArgs 中的元素替换这些占位符并拼接在一起:
- 定义
partialFn函数,该函数接受restArgs参数。 - 遍历
args数组,如果遇到"_",将其替换为restArgs中相应的值,并在restArgs中移除该值。 - 将剩余的
restArgs添加到args的末尾,以完成参数列表。 - 使用展开运算符将修改后的
args作为参数调用fn。
代码
/**
* @param {Function} fn
* @param {Array} args
* @return {Function}
*/
var partial = function (fn, args) {
return function (...restArgs) {
let filledArgs = args.map((arg) => (arg === '_' ? restArgs.shift() : arg));
return fn(...filledArgs, ...restArgs);
};
};
