MDN 定义 reduce() 如下:
reduce() 方法对数组的每个元素执行一个 reducer 函数(由您提供),从而产生一个输出值。
我们不要想当然,只分析以下语句的语法:
const array1 = [1, 2, 3, 4];
const reducer = (y, x) => y + x;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
- reducer 是一个函数,它接受两个参数并返回它们的总和
- reducer 在数组的每个元素上执行,但“数组的每个元素”只是一个参数,为什么我可以假设 SUM 是另一个参数并缓存在某个地方等待下一次添加操作?为什么我可以假设 reduce 在最后返回总和?
有人可以回答这些问题吗?来自其他语言背景的人,例如也具有函数概念的 C。我经常对 Javascript 的语法感到困惑。
这就是我看到以下内容时变得更加困惑的原因:
const pipeline = [
array => { array.pop(); return array; },
array => array.reverse()
];
pipeline.reduce((xs, f) => f(xs), [1, 2, 3]);
因为根据 MDN,reduce() 方法再次对数组的每个元素执行一个 reducer 函数(您提供的),从而产生一个输出值。
只有这一次,
减速器:(xs, f) => f(xs)
累加器:[1,2,3]
array1:管道
那么我们如何解释它的行为类似于我们在英语中的第一个例子呢?