将参数传递给 reducer 函数

3

我正在学习如何使用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 等等,但是如何传递额外的参数,比如自定义乘数,而不需要为每个乘数编写不同的乘数函数呢?

1个回答

1

将其作为柯里化函数执行,以便按预期工作:

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

这样,当您调用multiplier(4)时,它将返回一个定制的函数,其中包含所需的factor,您可以像预期的那样在您的reducer中使用它。

嗯,这仍然让我有点困惑,可能是因为我相对较新于使用柯里化。所以我们将4传递给乘数。乘数将该因子参数传递到约简器中?约简器是在第一个函数中使用它还是只是将其传递,还是我没有很好地理解这个? - Rob
1
multiplier(4) 返回另一个函数,该函数设置 factor 值。返回的函数由 reducer 使用。由 reducer 使用的返回函数将是 (acc, val) => acc += multiply(val, 4),因为您将 4 作为 factor 值传递。 - buzatto
就个人而言,一开始可能会感到困惑,但是一旦掌握了它,你会喜欢上它的灵活性。干杯! - buzatto
1
第二个解释确实增加了一些清晰度。感谢您的指导! - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接