参见英文答案 >
Variadic curried sum function11个
这是一个我尚未弄清楚的面试问题.考虑以下:
这是一个我尚未弄清楚的面试问题.考虑以下:
function recurse(a) { return function(b) { console.log(a + b); } } //This will log '5' in the console recurse(2)(3);
现在我被要求编写一个函数,它将获取n个参数,并通过记录参数值的最终总和以相同的方式工作.含义:
//This should log '13' recurse(2)(3)(1)(7)
如何编写这样的函数?我已经尝试过在递归,动态参数等方面进行思考.但是还没有能够记下任何具体的东西.
解决方法
这是我能想到的最简单的版本:
function add (a) { return function (b) { return b == null ? a : add(a+b); } } console.log( add(2)(3)() ); console.log( add(10)(100)(1000)(4)() );
在es6中,它很紧凑!
let add = a => b => b == null ? a : add(a+b);
注意
let result = add(2)(3);
相当于:
/*1*/ let partialResult = add(2); /*2*/ let result = partialResult(3);
在第1行中,add不知道是否使用最后一个参数调用它!换句话说,它不知道partialResult应该是一个数字,还是一个将用另一个参数调用的函数.
Nina Scholz为您提供了一个解决方案,其中partialResult在处理时像primitive一样表现得像一个数字,就像函数一样被调用时.在我的解决方案中,partialResult总是像一个函数一样,并在没有参数的情况下调用时返回一个sum.
第一种方法需要一种特定于语言的机制,以便在某些条件下“表现得像一个数字”.如果您的采访是关于JavaScript的,那么这是最好的近似值!但在语言不可知的背景下,你所要求的是不可能的.
原文地址:https://www.jb51.cc/js/150441.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。