我正在尝试编写一个可在许多场景下工作的添加功能.
add(2,2,2) //6
add(2,2,2,2) //8
add(2)(2)(2) // 6
add(2)(2)(2,2).value() //8
add(2,2)(2) + 2 //8
add(2).add(2) //4
add(2,2,2).add(2).add(2,2).value() //12
add(2,2,2).add(2).value() //8
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
function add(){
var sum = 0;
for( var i in arguments ){
sum += arguments[i];
}
var ret = add.bind(null, sum);
ret.value = function () {
return sum;
}
ret.add = function () {
for( var i in arguments ){
sum += arguments[i];
}
return sum;
}
ret.valueOf = function(){ return sum; };
return ret;
}
console.log(add(2,2,2));
console.log(add(2,2,2,2));
console.log(add(2)(2)(2)); …Run Code Online (Sandbox Code Playgroud)我已经编写了代码来实现
sum(1)(2) //3
Run Code Online (Sandbox Code Playgroud)
代码如下:
function sum(a) {
return function(b) {
return a+b
}
}
Run Code Online (Sandbox Code Playgroud)
但我没有解决第二个问题,即如何实现任意数量的链函数调用:
sum(1)(2) == 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15
Run Code Online (Sandbox Code Playgroud) 这是一个我尚未弄清楚的面试问题.考虑以下:
function recurse(a) {
return function(b) {
console.log(a + b);
}
}
//This will log '5' in the console
recurse(2)(3);
Run Code Online (Sandbox Code Playgroud)
现在我被要求编写一个函数,该函数将采用n多个参数并通过记录参数值的最终总和以相同的方式工作.含义:
//This should log '13'
recurse(2)(3)(1)(7)
Run Code Online (Sandbox Code Playgroud)
如何编写这样的函数?我已经尝试过在递归,动态参数等方面进行思考.但是还没有能够记下任何具体的东西.
我正在学习JavaScript,最近我遇到了一个练习题,要求我构建一个可以创建输出的函数,如下所示:
var threeSum= sum(3);
threeSum //3
threeSum(4) //7
threeSum(4)(3) //10
threeSum(4)(3)(7) //17
threeSum(4)(3)(7)()(2) //19
threeSum - 2 //1
threeSum + 2 //5
Run Code Online (Sandbox Code Playgroud)
我认为涉及到currying,我认为我已经基本掌握了curry如何以简单的形式工作
a=>b=>c=> a+b+c
Run Code Online (Sandbox Code Playgroud)
但我不知道如何创建一个能够处理不确定数量的输入的curried函数,也不知道如何使它成为一个可以作为值和函数的变量.
任何见解都表示赞赏!我只需要朝着正确的方向努力 - 此时我甚至不知道我在寻找什么.
javascript问题添加无限数字,末尾没有空括号
我试过这个:
const Sum = function (a) {
function innerFunc (b) {
console.log("B", b)
return b ? Sum(a + b) : a;
}
}
console.log(Sum(2)(3)(4))
Run Code Online (Sandbox Code Playgroud)
但它适用于 console.log(Sum(2)(3)(4)()) 即最后一个空括号,有没有办法通过更改函数来做到这一点,以便没有空括号的控制台日志给出正确的结果结果,目前它抛出一个错误,指出 Sum 不是函数
我有这个函数,需要能够接受多组输入并返回每个输入的总和。例如:
magicFunction(1)(2)(3) => 6
Run Code Online (Sandbox Code Playgroud)
我用下面的代码完成了这一点。“f(y)”将一直运行,直到没有剩余的输入集。
function magicFunction(x) {
var sum = x;
function f(y) {
sum += y;
return f;
};
return f;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我希望函数返回总和,但该函数最后将返回“[Function: f]”。目前,该函数执行以下操作:
magicFunction(1)(2)(3) => [Function: f]
Run Code Online (Sandbox Code Playgroud)
我不知道如何在最后一次输入后返回总和。有没有办法检查代码是否到达最后一个输入集?因此,我可以运行“return sum”,而不是“return f”。
我考虑添加一个“toString”方法,然后使用“console.log”输出结果。但我正在寻找返回值的函数,而不仅仅是将值输出到控制台。
function sum(a){
if(!a) return 0;
return b=>a + sum(b);
}
console.log(sum(2)(3)); // returns a string "ab=>a + sum(b)"
console.log(sum(2)(3)()); // says sum (..)(..) is not a functionRun Code Online (Sandbox Code Playgroud)
发生这种情况有什么特别的原因吗?
我尝试使用闭包进行下一步:
function func(number) {
var result = number;
var res = function(num) {
return result + num;
};
return res;
}
var result = func(2)(3)(4)(5)(3);
console.log(result); // 17
Run Code Online (Sandbox Code Playgroud)
我需要收到2 + 3 + 4 + 5 + 3 = 17但我收到一个错误:未捕获TypeError:数字不是函数
我想创建一个添加参数的函数.应该调用这个函数
functionAdd(2)(3)(4)...(n);
Run Code Online (Sandbox Code Playgroud)
结果2 + 3 + 4 ... + n我正在尝试这个
function myfunction(num){
var summ =+ num;
if(num !== undefined){
return myfunction(summ);
}
};
Run Code Online (Sandbox Code Playgroud)
但它不起作用,ovwerflow的错误.而且我不明白我应该从这个功能中找到什么;
如何定义foo以使以下代码按预期正确工作(在 JavaScript 中)?
foo[1] + 1 // 2
foo[1][2] + 1 // 4
foo[10][20][30] + 1 // 61
foo[100][200][300] + 1 // 601
Run Code Online (Sandbox Code Playgroud)
这是我曾经遇到过的一个面试题。