类似map的ES6功能
ES6 function similar to map
我遇到了可能类似于 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 时没有任何参数?
首先您需要了解 reduce()
函数的作用。这是一个很棒的 article.
简而言之,它用于从列表中累加值。不一定是总和,但您可以将其用于需要基于列表所有元素的结果的操作。
您的代码似乎是从列表中获取所有元素,并将其乘以 2。这就像 [...accum, current * 2]
基本上创建了一个数组,其中包含 accum
数组中的所有值,并且乘法结果。 (参见 destructuring)
- 正在解构
accum
中的值
- 它没有被调用,它被传递以便可以在函数中调用它。
综上所述,reduce
是一个高阶函数,它接受一个名为reducer
的函数并递归调用它。现在,整个函数可以重写为仅使用 1 个 .reduce()
调用,但由于这不是您要的,所以我不会批评。
我遇到了可能类似于 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 时没有任何参数?
首先您需要了解 reduce()
函数的作用。这是一个很棒的 article.
简而言之,它用于从列表中累加值。不一定是总和,但您可以将其用于需要基于列表所有元素的结果的操作。
您的代码似乎是从列表中获取所有元素,并将其乘以 2。这就像 [...accum, current * 2]
基本上创建了一个数组,其中包含 accum
数组中的所有值,并且乘法结果。 (参见 destructuring)
- 正在解构
accum
中的值
- 它没有被调用,它被传递以便可以在函数中调用它。
综上所述,reduce
是一个高阶函数,它接受一个名为reducer
的函数并递归调用它。现在,整个函数可以重写为仅使用 1 个 .reduce()
调用,但由于这不是您要的,所以我不会批评。