javascript - 创建要添加的函数,使得 add(1,2)(3,...k)(1,2,3)...(n) 应该对所有数字求和
问题描述
我一直在寻找一种方法来创建一个“添加”功能,这样:
add(1,2) //returns 1+2= 3
add(1)(2,3)(4) // returns 10
add(1)(2,3)(4)(5,6)(7,8,9) //returns 45
如果我知道我们拥有的参数数量,我可以创建 add 方法,例如:
const add5 = a => b => c => d => e => a+b+c+d+e;
所以,如果我使用 add5(1)(2)(3)(4)(5),这会给我预期的输出。
但问题是如果我们必须返回“N”个参数的总和,如何解决这个问题。
蒂亚!
解决方案
在一般情况下这是不可能的,除非toString
允许对调用结果进行强制转换add
(或者除非事先知道调用次数):
function add(...next) {
let count = 0;
// return a callable function which, when coerced to a string,
// returns the closure's `count`:
function internalAdd(...next) {
count += next.reduce((a, b) => a + b, 0);
return internalAdd;
}
internalAdd.toString = () => count;
return internalAdd(...next);
}
console.log('' + add(1,2)) //returns 1+2= 3
console.log('' + add(1)(2,3)(4)) // returns 10
console.log('' + add(1)(2,3)(4)(5,6)(7,8,9)) //returns 45
推荐阅读
- logstash-grok - Telegraf 解析“grok”模式
- javascript - 游戏循环似乎在遍历数组结束时中断。未捕获的类型错误
- twilio - Twilio 支付与 Braintree 的集成
- match - 大小写和匹配有什么区别?
- python - Python 清除列表以在 Tkinter 小部件中使用
- redis - Redis 使用 RDB 和 AOF 文件作为磁盘持久性
- jasmine - 为组件生成的默认规范文件说明
- javascript - Javascript - 从列表中创建一个数组
- reactjs - 导出默认的 react-native 组件
- node.js - Heroku - 错误:ENOENT:没有这样的文件或目录,stat '/app/dist/index.html'