ES6功能类似于地图

时间:2018-05-10 17:45:37

标签: javascript arrow-functions

我遇到的代码可能就像map函数一样,但我并不理解所有语义。看看这段代码:

const reduce = (reducer, accumulator) => arr => {
    const [first, ...rest] = arr
    return arr.length
     ? reduce(reducer, reducer(accumulator, first))(rest)
     : accumulator
}

reduce((accum, current) => [...accum, current * 2], [])([1, 2, 3]);

你能解释一下这段代码是如何工作的吗?

  1. 为什么...accum是第一个arg,但应该是最后一个,...accum在这个例子中是什么意思?

  2. 为什么在reduce第一个reducer被调用时没有任何参数?

1 个答案:

答案 0 :(得分:1)

首先,您需要了解reduce()函数的作用。这是一个很棒的article

简而言之,它用于累积列表中的值。不一定是总和,但您可以使用基于列表中所有元素的结果进行操作。

您的代码似乎从列表中获取所有元素,并将其乘以2.这就像[...accum, current * 2]基本上创建一个数组,其中包含accum数组中的所有值以及乘法结果。 (见destructuring

  1. 它正在对accum
  2. 中的值进行解构
  3. 它没有被调用,它被传递以便可以在函数中调用它。
  4. 总之,reduce是一个高阶函数,它接受一个名为reducer的函数并以递归方式调用它。现在,可以重写整个函数只使用1 .reduce()次调用,但由于这不是你所要求的,我不会扮演评论家。