返回介绍

solution / 2700-2799 / 2797.Partial Function with Placeholders / README

发布于 2024-06-17 01:02:59 字数 3144 浏览 0 评论 0 收藏 0

2797. 带有占位符的部分函数

English Version

题目描述

给定函数 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 是一个函数
  • argsrestArgs 都是有效的 JSON 数组
  • 1 <= args.length <= 5 * 104
  • 1 <= restArgs.length <= 5 * 104
  • 0 <= number of placeholders <= restArgs.length

解法

方法一

function partial(fn: Function, args: any[]): Function {
  return function (...restArgs) {
    let i = 0;
    for (let j = 0; j < args.length; ++j) {
      if (args[j] === '_') {
        args[j] = restArgs[i++];
      }
    }
    while (i < restArgs.length) {
      args.push(restArgs[i++]);
    }
    return fn(...args);
  };
}
/**
 * @param {Function} fn
 * @param {Array} args
 * @return {Function}
 */
var partial = function (fn, args) {
  return function (...restArgs) {
    let i = 0;
    for (let j = 0; j < args.length; ++j) {
      if (args[j] === '_') {
        args[j] = restArgs[i++];
      }
    }
    while (i < restArgs.length) {
      args.push(restArgs[i++]);
    }
    return fn.apply(this, args);
  };
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文