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

Javascript 如何将参数传递给array.map()?,javascript,Javascript,我试图将值映射到一个函数,该函数将接受两个数字相乘,但在这样做时遇到困难(如果这没有意义,请看下面的示例) 我有一个数字数组,我想翻倍/三倍/四倍。。。此数组的值。我已经创建了可以实现这一点的函数,并且正在将这些double()和triple()输入map() 这个解决方案是不可伸缩的,因为如果我想将这些值乘以5或10会怎么样?我需要一个更抽象的函数,它将采用一个参数来表示乘法。我不知道该怎么做。到目前为止,我的努力是: var arr = [1, 2, 3, 4, 5]; function

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

我有一个数字数组,我想翻倍/三倍/四倍。。。此数组的值。我已经创建了可以实现这一点的函数,并且正在将这些
double()
triple()
输入
map()

这个解决方案是不可伸缩的,因为如果我想将这些值乘以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
呢?

您可以使用它创建一个带有绑定参数的新函数。比如说

var-arr=[1,2,3,4,5];
函数multiplyBy(multiplyBy,num){
//注意如果要表示“map”中的参数,“num”参数必须位于最后
返回num*倍数;
}
console.log(arr.map(multilyby.bind(null,4));//null表示您要查找的“this”参数。例如,可以使用(或函数库附带的许多辅助函数,如):

但是,简单的箭头功能会更容易:

arr.map(x => multiplyBy(4, x))
但是,如果您使用
multiplyBy
函数,获取乘数并返回新函数,也可以免费获得部分应用程序:

function multiplyBy(multiplier) {
  return function(num) {
    return num * multiplier;
  };
}
// ES6 arrow functions:
const multiplyBy = multiplier => num => num * multiplier;

arr.map(multiplyBy(4));

你可以做一些叫做工厂咖喱的事情。实际上,您创建的函数将返回另一个根据您的需要定制的函数。在这种情况下,一个匿名的

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答案的最后一部分与我的答案相同。这个概念显然被称为“咖喱”。谢谢@Bergi!正如Bergi所指出的,工厂模式更常用于对象的生产,但这是当时我唯一能想到的,javascript将函数视为对象。在这种特殊情况下,它们实际上是相似的

我只会将术语“工厂”用于返回对象的函数。我使我的答案更具可读性,我使用奇怪的缩进只是为了使ES6 arrow函数的转换更明显。这个答案比使用
.bind
function multiplyBy(multiplier) {
  return function(num) {
    return num * multiplier;
  };
}
// ES6 arrow functions:
const multiplyBy = multiplier => num => num * multiplier;

arr.map(multiplyBy(4));
var arr = [1, 2, 3, 4, 5];

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

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