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

如何根据数字数组长度程序化链式调用sum柯里化函数并以空括号收尾

实现方案

你给出的sum是典型的单参数柯里化累加函数,靠传入空参触发结果返回,适配任意长度数字数组不需要动态拼接调用代码,用数组的reduce方法即可实现程序化链式调用。

完整实现代码

// 原有柯里化累加函数
let sum = a => b => b ? sum(a + b) : a;
// 任意长度的数字数组
let arrayValue = [1,2,3,4,5];

// 逐次传入数组元素完成链式调用,最后空参触发结果返回
const total = arrayValue.reduce((currentFunc, num) => currentFunc(num), sum)();

console.log(total); // 输出 15,等价于sum(1)(2)(3)(4)(5)()的执行结果

逻辑说明

  • 把reduce的初始值设置为最外层的sum函数
  • 遍历数组每一项时,执行上一轮返回的待调用函数、传入当前数字,得到下一层等待传参的新函数
  • 数组遍历完成后,所有数字已经按顺序传入了调用链,最后追加一次空参()调用,就会触发sum的终止判断,返回最终累加结果

比如传入测试数组[10,20,3,4],执行后得到结果37,和示例sum(10)(20)(3)(4)()运行结果完全一致。

边界兼容

如果需要兼容空数组场景,加一层长度判断即可,避免直接空参调用sum得到异常值:

const total = arrayValue.length
  ? arrayValue.reduce((currentFunc, num) => currentFunc(num), sum)()
  : 0;

这个方案对数组长度没有限制,哪怕数组有上百个元素,也能正确生成对应长度的调用链,不需要用eval之类的危险语法动态拼接执行代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:18:20