es6中用reduce实现函数链式调用

今天在网上查阅学习了reduce这个api的一些运用场景,也跟着在谷歌控制台敲了代码的实现方式,有看一篇文章
需求:add()(1,2)(3,4)(7,8,9)() 最后输出 // 34
这个函数用reduce实现!有没有人给出优雅的代码呢

阅读 3.5k
4 个回答

你没有说具体规则 根据你的例子第一次调用和最后一次调用参数是空 所以:

function add(){
  let arr = [];
  return function fn(){
    if(arguments.length>0){
      arr.push(...arguments)
      return fn;
    }
    return arr.reduce((sum,v)=>sum+v);
  }
}

console.log(add()(1,2)(3,4)(7,8,9)())//34
function add() {
    var args = []
    
    return function foo() {
        var arg = [].slice.apply(arguments)

        if (arg.length == 0) {
            return args.reduce(function(x,y){return x+y;}, 0)
        }

        args = args.concat(arg)

        return foo;
    }
}
const add = function() {
  let v = 0, 
    f = function(){
    v = [].reduce.call(arguments, (a, b) => a + b, v);
    return arguments.length ? f : v;
  };
  return f
};
console.log(add()(1, 2)(3, 4)(7, 8, 9)())
推荐问题
宣传栏