【发布时间】:2018-11-27 18:04:54
【问题描述】:
在最近的一次采访中,我被要求创建一个在下面的代码 sn-p 中描述的函数
add(2,3,4)(5,6)(7,8); // Should yield 35
从上面的 sn-p 中可以看出,有一个名为“add”的函数可以无限调用,每次调用可以容纳无限参数。最后,它应该返回所有调用中所有参数的总和。
下面是一个部分解决方案,它需要不带参数的最终调用。
/**
* @description
* infiniteAdd(2,3)(4,5)(6,7)()
* Above operation yields 27
*/
function infiniteAdd() {
// Creating closure for subsequent function invocations
var prevArgs = Array.prototype.slice.call(arguments);
return function() {
var currArgs = Array.prototype.concat.call(prevArgs, Array.prototype.slice.call(arguments));
if (arguments.length < 1) {
// if no arguments than calculate sum
return Array.prototype.reduce.call(currArgs,
function(acc, curr) {
return acc + curr;
}
);
}
// Recursively call the main function till no more arguments provided
return infiniteAdd.apply(null, currArgs);
}
}
console.log(infiniteAdd(2, 3)(4, 5)(6, 7)());
【问题讨论】:
-
你有什么问题?
-
您好,您能澄清一下您的问题吗?这不是用于代码审查或代码编写的服务,因此大多数问题应该描述代码的特定问题,或者您想了解的特定问题。请查看help center,了解有关此网站如何运作以及预期问题的更多信息。
标签: javascript arrays addition