首页 > 解决方案 > 将参数传递给 reducer 函数

问题描述

我正在学习如何使用reduce,但在acc、val 参数上仍有一点心理障碍。我的目标是能够将额外的参数传递给 reducer 函数,并且确信我只是以错误的方式进行操作。

const array = [1,2,3,4,5];

const multiply = (num, multiplier) => num * multiplier;

const multiplier = (acc, val) => acc += multiply(val, 4);

const result = array.reduce(multiplier);

console.log(result);

在这个代码块中,我正在对我的数组运行乘数归约器,以将每个值乘以 4。这段代码工作正常,一切都很好,但我想让它可以传递任何值而不是硬编码 4. 我尝试过类似的东西

const multiplier = (acc, val, multiple) => acc += multiply(val, multiple);
const result = array.reduce(multiplier(4)

能够传入一个乘数,但是“acc,val”参数让我很困惑,因为我没有专门“看到”传入的值是什么。我知道它传入 1 然后 2 然后 3 等等. 但是你如何传递一个额外的参数,比如自定义乘数,而不是为每个倍数都需要一个不同的乘数函数?

标签: javascriptreduce

解决方案


将其作为一个可以按预期工作的柯里化函数:

const multiplier = factor => (acc, val) => acc += multiply(val, factor);
const result = array.reduce(multiplier(4));

这样,当您调用multiplier(4)它时,它将返回一个定制的函数factor,您可以按照您的预期在减速器上使用该函数。


推荐阅读