gpt4 book ai didi

javascript - 如何将参数传递给 array.map()?

转载 作者:行者123 更新时间:2023-12-03 03:35:40 25 4
gpt4 key购买 nike

我正在尝试将值映射到一个接受两个数字相乘的函数,但这样做时遇到困难(如果这没有意义,请查看下面的示例)。

我有一个数字数组,我想将该数组的值加倍/三倍/四倍...。我创建了可以执行此操作的函数,并将这些 double()triple() 输入到 map() 中。

var arr = [1, 2, 3, 4, 5];

function double(num) {
return num * 2;
}

function triple(num) {
return num * 3;
}

console.log( arr.map(double) );
console.log( arr.map(triple) );

此解决方案不可扩展,如果我想将值乘以 5 或 10,该怎么办?我需要一个更抽象的函数,它需要一个要相乘的参数。我对如何做到这一点感到困惑。到目前为止我的尝试是:

var arr = [1, 2, 3, 4, 5];

function multiply(num, multiplyBy) {
return num * multiplyBy;
}

console.log( arr.map(multiplyBy(4) ); // Uncaught TypeError: NaN is not a function

如何传递 multiply() multiplyBy 参数?

最佳答案

你可以做一些叫做 工厂 柯里化(Currying)的事情。实际上,您创建的函数将返回另一个根据您的需求定制的函数。在本例中,是匿名的。

var arr = [1, 2, 3, 4, 5];

function multiplyBy(scale) {
return function(num){
return num * scale;
}
}

console.log( arr.map( multiplyBy(4) ));

这是有效的,因为返回的匿名函数的范围在 factory 外部函数的范围内。因此,每当我们生成一个新函数时,它将保留为其生成指定的 scale 值。

编辑:@Bergi 答案的最后一部分与我的相同。这个概念显然被称为柯里化(Currying)(currying)。谢谢@Bergi!正如 Bergi 所说,工厂模式更常应用于对象的生产,但这是我当时唯一能想到的,而 javascript 则将函数视为对象。在这种特定情况下,它们实际上是相似的。 Here is a good reference for currying in JavaScript

关于javascript - 如何将参数传递给 array.map()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45928903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com