gpt4 book ai didi

Javascript无限柯里化(Currying)加法支持无限调用和每次调用无限参数?

转载 作者:行者123 更新时间:2023-12-03 00:39:53 24 4
gpt4 key购买 nike

在最近的一次采访中,我被要求创建一个如下代码片段中描述的函数

add(2,3,4)(5,6)(7,8); // Should yield 35

如上面的代码片段所示,有一个名为“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)());

最佳答案

您可以像下面这样实现加法的柯里化(Currying)函数

function addition(...args) {
return args.reduce((a, b) => a + b)
}

function parseAdd(fn) {
var newFn = fn.bind(null);

function cal(...args) {
newFn = newFn.bind(null, ...args);
return cal;
}

cal.toString = () => newFn();

return (...arg) => {
newFn = fn.bind(null);
return cal(...arg)
}
}

var add = parseAdd(addition)

console.log(add(2, 3, 4)(5, 6)(7, 8))

关于Javascript无限柯里化(Currying)加法支持无限调用和每次调用无限参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com