我遇到的代码可能就像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]);
你能解释一下这段代码是如何工作的吗?
为什么...accum
是第一个arg,但应该是最后一个,...accum
在这个例子中是什么意思?
为什么在reduce
第一个reducer被调用时没有任何参数?
答案 0 :(得分:1)
首先,您需要了解reduce()
函数的作用。这是一个很棒的article。
简而言之,它用于累积列表中的值。不一定是总和,但您可以使用基于列表中所有元素的结果进行操作。
您的代码似乎从列表中获取所有元素,并将其乘以2.这就像[...accum, current * 2]
基本上创建一个数组,其中包含accum
数组中的所有值以及乘法结果。 (见destructuring)
accum
总之,reduce
是一个高阶函数,它接受一个名为reducer
的函数并以递归方式调用它。现在,可以重写整个函数只使用1 .reduce()
次调用,但由于这不是你所要求的,我不会扮演评论家。