javascript – 使用动态参数递归

前端之家收集整理的这篇文章主要介绍了javascript – 使用动态参数递归前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > 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.f2er.com/js/150441.html

猜你在找的JavaScript相关文章