了解.reduce()中的许多函数参数

时间:2016-08-09 08:30:34

标签: javascript ecmascript-6 reduce arrow-functions

以下.reduce()方法取自this SO answer,包含许多参数(通常称为解构对象)。

这些参数代表什么功能?

let {result} = array.reduce(({arg_1, arg_2, arg_3}, arg_4)=> {
}, {result: [], arg_2: 0, arg_3: undefined})
return result

3 个答案:

答案 0 :(得分:2)

如果OP偶然发现了解构表示法,对于给定的示例,第一个参数是初始值(用前两个注释的provided links描述),作为收集器或累加器对象。它由另一种方法的前三个参数组成。结果由解构赋值写入,因此,将有3个变量arg_1arg_2arg_3派生自最终返回的收集器对象的同名参数。

  

编辑,因为OP提供的示例代码已更改...

下一个示例将OP的链接SO代码引用考虑在内......

let {slots} = array.reduce(({slots, count, prev}, item)=> {

    // ... do something with slots
    // ...
    // while iterating always needs to return
    // an equally structured collector object

    return {slots, count: count + 1, prev: item}

}, {slots: [], count: 0, prev: undefined})

/*
return slots; // does not really make sense within this shortened example's context.
*/

......等于......

var slots = array.reduce(function (collector, item) {

    var
        slots = collector.slots,
        count = collector.count,
        prev  = collector.prev;

    // ... do something with slots
    // ...
    // while iterating always needs to return
    // an equally structured collector object

    return {slots: slots, count: count + 1, prev: item};

}, {slots: [], count: 0, prev: undefined}).slots;

答案 1 :(得分:2)

reduce方法接受两个参数。

语法:

  

arr.reduce(callback [,initialValue])

因此,在您的示例中,回调用作第一个参数arrow function。让我们打破它:

1. ({arg_1, arg_2, arg_3}, arg_4)=> {}  //the callback
2. {arg_1: [], arg_2: 0, arg_3: undefined} // the initial value

并且({arg_1, arg_2, arg_3}, arg_4)具有<{3}}的两个参数,首先声明为对象。

您可能会注意到arg_4的初始值缺失。

答案 2 :(得分:1)

Array.reduce需要2个参数,

  1. 回调
  2. 初值
  3. Array.reduce的回调获得了4个参数:

    1. PREVIOUSVALUE
    2. CurrentValue的
    3. CURRENTINDEX
    4. 阵列
    5. previousValue的值在循环开始时为initialValue。如果未传递任何值,第一个元素将被视为previousValuecurrentValue将具有下一个值。从它们开始,previousValue将保存上一次迭代中返回的值。

      示例

      没有初始值

      &#13;
      &#13;
      var a = [1,2,4,4,5,6,7,8];
      
      a.reduce(function(p,c,i,a){
        console.log(p,c,i,a);
        return c
      })
      &#13;
      &#13;
      &#13;

      初始值

      &#13;
      &#13;
      var a = [1,2,4,4,5,6,7,8];
      
      a.reduce(function(p,c,i,a){
        console.log(p,c,i,a);
        return c
      },0)
      &#13;
      &#13;
      &#13;

      参考

      Array.reduce