Javascript 求和(2)(3)和求和(2,3)两者的共同解决方案是什么

Javascript 求和(2)(3)和求和(2,3)两者的共同解决方案是什么,javascript,currying,Javascript,Currying,我在一次采访中被问到这个问题 对于sum(2)(3)以咖喱风格 sum(a){ 返回(b){ 返回a+b; } } 求和(2,3) sum(a,b){ 返回a+b; } 有什么共同的功能可以同时适用于这两种情况吗?有一种方法,但它非常粗糙 您可以随时检查是否已将第二个参数传递给您的函数,并做出相应的反应 function sum(a, b){ if(b === undefined){ return (c) => { return c +

我在一次采访中被问到这个问题

对于
sum(2)(3)
以咖喱风格

sum(a){
返回(b){
返回a+b;
}
}
求和(2,3)

sum(a,b){
返回a+b;
}

有什么共同的功能可以同时适用于这两种情况吗?有一种方法,但它非常粗糙

您可以随时检查是否已将第二个参数传递给您的函数,并做出相应的反应

function sum(a, b){
    if(b === undefined){
        return (c) => {
            return c + a;
        }
    }

    return a + b;
}

有一个方法,但它是相当黑客

您可以随时检查是否已将第二个参数传递给您的函数,并做出相应的反应

function sum(a, b){
    if(b === undefined){
        return (c) => {
            return c + a;
        }
    }

    return a + b;
}

您可以根据对象的
长度
返回总和或函数

函数和(a,b){
return arguments.length==2//是否传递了两个参数?
?a+b//是:返回其总和
:(b)=>a+b//no:返回函数
};
控制台日志(总和(3)(5));

控制台日志(总和(3,5))
您可以根据对象的
长度
返回总和或函数

函数和(a,b){
return arguments.length==2//是否传递了两个参数?
?a+b//是:返回其总和
:(b)=>a+b//no:返回函数
};
控制台日志(总和(3)(5));

控制台日志(总和(3,5))这里有一个函数,可以从任何非curried函数创建通用curried函数。它是在不使用任何ECMAScript 6语法的情况下编写的。无论原始函数预期的参数数量是多少,或者提供给每个部分应用程序的参数数量是多少,这都是有效的

函数和(a,b){
返回a+b;
}
功能产品(a、b、c){
返回a*b*c;
}
功能咖喱(fn){
返回函数部分(){
返回参数.length>=fn.length
?fn.应用(此,参数)
:partial.bind.apply(partial[this].concat(Array.prototype.slice.call(arguments));
};
}
var s=咖喱(总和);
控制台日志(s(1,2));
控制台日志(第(1)(2)条);
console.log(s()(1)((2));
var p=咖喱(产品);
console.log(p(2,3,4));
控制台日志(p(2)(3)(4));

log(p()(2)((3,4))这里有一个函数,可以从任何非curried函数创建通用curried函数。它是在不使用任何ECMAScript 6语法的情况下编写的。无论原始函数预期的参数数量是多少,或者提供给每个部分应用程序的参数数量是多少,这都是有效的

函数和(a,b){
返回a+b;
}
功能产品(a、b、c){
返回a*b*c;
}
功能咖喱(fn){
返回函数部分(){
返回参数.length>=fn.length
?fn.应用(此,参数)
:partial.bind.apply(partial[this].concat(Array.prototype.slice.call(arguments));
};
}
var s=咖喱(总和);
控制台日志(s(1,2));
控制台日志(第(1)(2)条);
console.log(s()(1)((2));
var p=咖喱(产品);
console.log(p(2,3,4));
控制台日志(p(2)(3)(4));

log(p()(2)((3,4))您可以使用一个函数,该函数可以同时执行以下两种操作:

这里的想法是每次返回一个函数和一个计算值,这样,如果再次调用它,返回的函数将处理它,如果没有调用它,则打印计算值

函数和(…参数){
函数添加(…args2){
返回和(…args,…args2);
}
常量t=[…args].reduce((acc,curr)=>acc+curr,0);
附加值=t;
返回添加;
}
const result1=和(2,3).值;
const result2=和(2)(3).值;
const result3=和(2,3)(4).值;
const result4=和(2,3)(4,5).值;
const result5=和(2,3)(4,5)(6)。值;

log({result1,result2,result3,result4,result5})您可以使用一个函数,该函数可以同时执行以下两种操作:

这里的想法是每次返回一个函数和一个计算值,这样,如果再次调用它,返回的函数将处理它,如果没有调用它,则打印计算值

函数和(…参数){
函数添加(…args2){
返回和(…args,…args2);
}
常量t=[…args].reduce((acc,curr)=>acc+curr,0);
附加值=t;
返回添加;
}
const result1=和(2,3).值;
const result2=和(2)(3).值;
const result3=和(2,3)(4).值;
const result4=和(2,3)(4,5).值;
const result5=和(2,3)(4,5)(6)。值;

log({result1,result2,result3,result4,result5})你可以做一个,但它会很难看,而且我的代码风格很差。只需检查第二个参数是否存在,如果不存在,则返回函数,否则返回结果。检查得到的数量,然后返回结果或内部函数。最大“统一”:这可以用代码中的单个“+”来解决。肯定有重复的地方,我知道我以前已经回答过这个问题……可能是相关的:你可以做一个,但它会很难看,而且我的代码风格很糟糕。只需检查第二个参数是否存在,如果不存在,则返回函数,否则返回结果。检查得到的数量,然后返回结果或内部函数。最大“统一”:这可以用代码中的单个“+”来解决。肯定有重复的地方,我知道我以前回答过这个问题…可能相关: