【问题标题】:Create function to add such that add(1,2)(3,...k)(1,2,3)...(n) should sum all numbers [duplicate]创建要添加的函数,使得 add(1,2)(3,...k)(1,2,3)...(n) 应该对所有数字求和[重复]
【发布时间】:2019-01-19 09:08:42
【问题描述】:

我一直在寻找一种方法来创建一个“添加”函数:

add(1,2) //returns 1+2= 3
add(1)(2,3)(4) // returns 10
add(1)(2,3)(4)(5,6)(7,8,9) //returns 45

如果我知道我们拥有的参数数量,我可以创建 add 方法,例如:

const add5 = a => b => c => d => e => a+b+c+d+e;

所以,如果我使用 add5(1)(2)(3)(4)(5),这将给我预期的输出。

但问题是如果我们必须返回“N”个参数的总和,如何解决这个问题。

TIA!

【问题讨论】:

  • 一般情况下不可能,除非在调用add的结果上允许toString强制转换
  • @CertainPerformance 你能提供一个相同的代码 sn-p 吗?我们到底应该怎么做?
  • 你能解释一下为什么需要这个吗?
  • 不确定您希望函数如何同时返回一个值和一个函数。返回值是否可以存储到输出变量而不是直接返回?
  • @AndrewShmig 在一次采访中被问及。当时无法解决:/

标签: javascript ecmascript-6


【解决方案1】:

在一般情况下这是不可能的,除非在调用 add 的结果上允许 toString 强制(或者除非事先知道调用次数):

function add(...next) {
  let count = 0;
  // return a callable function which, when coerced to a string,
  // returns the closure's `count`:
  function internalAdd(...next) {
    count += next.reduce((a, b) => a + b, 0);
    return internalAdd;
  }
  internalAdd.toString = () => count;
  return internalAdd(...next);
}

console.log('' + add(1,2)) //returns 1+2= 3
console.log('' + add(1)(2,3)(4)) // returns 10
console.log('' + add(1)(2,3)(4)(5,6)(7,8,9)) //returns 45

【讨论】:

  • 尽量不要使用多个函数共享的可变 count 变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2019-02-04
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多