想看大家做这道题的答案

2021-03-26 19:51:48 +08:00
 frankkai
想看大家做这道题的答案
用 JavaScript 实现一个 add(1,2,3)(4)(5)(6,7)(8)()

返回结果为这些数字的和:36 。
1681 次点击
所在节点    前端开发
10 条回复
powerfulyang
2021-03-26 19:55:37 +08:00
柯里化
imdong
2021-03-26 20:09:50 +08:00
function add() {
let nums = Array.from(_args);

return function () {
nums = nums.concat(Array.from(_args));

if (arguments.length <= 0) {
return nums.reduce(function (prev, cur) {
return prev + cur;
}, 0);
}

return arguments.callee;
};
}

add(1, 2, 3)(4)(5)(6, 7)(8)()
imdong
2021-03-26 20:10:56 +08:00
呃,变量名忘记改了,_args 应改为 arguments

正确代码应该是:

function add() {
let nums = Array.from(arguments);

return function () {
nums = nums.concat(Array.from(arguments));

if (arguments.length <= 0) {
return nums.reduce(function (prev, cur) {
return prev + cur;
}, 0);
}

return arguments.callee;
};
}

add(1, 2, 3)(4)(5)(6, 7)(8)()
Elethom
2021-03-26 21:50:39 +08:00
frankkai
2021-03-26 22:06:40 +08:00
@imdong 不错
enchilada2020
2021-03-26 22:29:45 +08:00
优化了下 #3 的代码 有错请轻喷。。
```JavaScript
const infiniteAdd = function () {
const args = [...arguments];
return function f() {
if (!arguments.length) return args.reduce((acc, cur) => acc + cur, 0);
args.push(...arguments);
return f;
}
};

console.log(infiniteAdd(1, 2, 3)(4, 5)(6)(7, 8, 9, 10)(11, 12)()); // 78
```
IsaacYoung
2021-03-26 22:38:43 +08:00
function curry(fn) {
let p = [];
const wrapper = function (...args) {
if(args.length) {
p = p.concat(args);
return wrapper
} else {
return fn(...p)
}
}
return wrapper
}
function addOriginal (...args) {
return args.reduce((prev, curr) => prev + curr, 0)
}

const add = curry(addOriginal)
muxw6
2021-03-26 22:55:05 +08:00
function add(...args) {
return function(..._args) {
return _args.length>0 ? add(...args, ..._args) : args.reduce((a, c) => a + c)
}
}
frankkai
2021-03-27 01:04:07 +08:00
@muxw6 很精简啊
iMusic
2021-03-27 09:45:25 +08:00
以前见过类似的题
```
sum(2)(3) 和 sum(2, 3)
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765529

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX