You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中结合递归的通用高阶函数实现问题咨询

问题错误分析

你的原始实现有两个核心问题:

  • 误用剩余参数...args:无论你传入什么类型的参数,args永远是数组类型,因此args.map判断永远为真,永远不会执行基础处理函数的逻辑
  • 递归调用对象错误:apply2Array是接收基础函数返回包装函数的高阶函数,本身不能直接处理输入值,递归时应该调用当前已绑定基础函数的包装后函数,而非高阶函数本身
正确实现思路

通用高阶函数apply2Array的逻辑如下:

  1. 接收任意单值处理函数fn作为入参
  2. 返回一个包装后的处理函数,该函数仅接收单个输入(你需求中输入要么是单值要么是单个数组,不需要支持多参数输入)
  3. 包装函数逻辑:
    • 用Array.isArray判断输入是否为数组,比判断是否存在map方法更严谨,可避免类数组对象的误判
    • 如果是数组:遍历每个元素,递归调用当前包装函数处理每个元素
    • 如果不是数组:直接调用fn处理输入值
完整实现代码
const apply2Array = fn => {
  // 定义包装函数,用于递归调用
  const wrapper = input => Array.isArray(input) 
    ? input.map(item => wrapper(item)) 
    : fn(input)
  return wrapper
}

// 测试用例
const convertF2C = x => (x - 32) / 1.8;
const arrayResult = apply2Array(convertF2C);

const A = [5, 14, 23, 32, 41];
const B = 50;
console.log(arrayResult(A)); // 输出: [-15, -10, -5, 0, 5]
console.log(arrayResult(B)); // 输出: 10

补充说明:该实现也支持嵌套数组的处理,例如输入[5, [14, 23], [32, [41]]]也可以递归处理所有层级的元素


内容的提问来源于stack exchange,提问作者NCL82409

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:27:03