将参数传递给 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 等等,但是你如何传递一个额外的参数,比如自定义乘数,而不是每个乘数都需要一个不同的乘数函数

解决方法

把它作为一个柯里化函数来做,它会按预期工作:

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

这样,当您调用 multiplier(4) 时,它会返回一个根据所需 factor 量身定制的函数,您可以按照预期在减速器中使用该函数。