关于js柯里化做笔试题时遇到一个问题

发布于 2022-09-11 15:11:56 字数 285 浏览 14 评论 0

请实现test2函数满足以下四个条件使其通过测试,以最简洁的方式完成,并保证代码质量
module.exports.test2 = (input) => {
}

(1)test2() === 0
(2)test2(1)() === 1
(3)test2(1)(2)(3)(4)() === 10
(4)const t2 = test2(1)(2); t2(3)() === 6; t2(4)() === 7
我写了一个函数,但是只能满足前三个条件,求大神赐教,怎么同时满足这四个条件,不知道咋写。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

草莓味的萝莉 2022-09-18 15:11:56
var add = function() {
    var _this = this,
    _args = arguments
    return function() {
        if (!arguments.length) {
            var sum = 0;
            for (var i = 0,c; c = _args[i++];) sum += c
            return sum
        } else {
            Array.prototype.push.apply(_args, arguments) 
            return arguments.callee
        }
    }
}
我的奇迹 2022-09-18 15:11:56

难点如何存储之前的参数,可以使用包裹一层函数的方式来存储,代码如下:

const test2 = (function create (...args) {
    return function compute (v) {
        if (v === undefined) {
            return args.reduce((r, v) => r += v, 0)
        }
        return create(...args, v)
    }
})()

演示地址:https://codesandbox.io/s/74z9...

靑春怀旧 2022-09-18 15:11:56

题目已经给出了函数的签名,那么答案是不应该擅自改动的。

module.exports.test2 = (input) => {
  const fn = a => b => b == null ? a : fn(a + b)
  return input == null ? 0 : fn(input)
}
狼亦尘 2022-09-18 15:11:56
function test2 (...args) {
  if (args.length === 0) {
    return 0
  }
  return function (num) {
    if (typeof num === 'number') {
      return test2(...args, num)
    } else {
      return args.reduce((sum, current) => sum + current)
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文