首页 > 解决方案 > 创建要添加的函数,使得 add(1,2)(3,...k)(1,2,3)...(n) 应该对所有数字求和

问题描述

我一直在寻找一种方法来创建一个“添加”功能,这样:

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”个参数的总和,如何解决这个问题。

蒂亚!

标签: javascriptecmascript-6

解决方案


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

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


推荐阅读