使用带有两个参数的函数的javascript映射

时间:2012-09-10 00:20:13

标签: javascript

我知道我可以通过以下方式将map与一个变量的函数结合使用:

var squarefunc = function(x) {
    return x*x;
};
values = [1,2,3,4]
values.map(squarefunc) // returns [1,4,9,16]

如何将map与以下功能一起使用:

var squarefuncwithadjustment = function(x, adjustment) {
    return (x*x + adjustment);
}

其中,我想在调用map时手动输入参数adjustment的值,比如说adjustment=2,并从数组x中取值values

8 个答案:

答案 0 :(得分:76)

使用匿名函数:

values.map(
  function(x) { return squarefuncwithadjustment(x, 2); }
);

答案 1 :(得分:39)

您可以使用回调创建功能:

var createSquareFuncWithAdjustment = function(adjustment) {
    return function(x) { return (x * x) + adjustment; };
};

values = [1, 2, 3, 4];
values.map(createSquareFuncWithAdjustment(2)); // returns [3, 6, 11, 18]

答案 2 :(得分:14)

从ES6开始,您可以使用:

.map((element) => func(element,params...))

在您的情况下,如果我想使用3作为调整:

values = [1,2,3,4]
values.map(n => squarefuncwithadjustment(n,3))

答案 3 :(得分:7)

如果颠倒参数的顺序,可以将调整绑定为第一个参数,以便将x作为第二个参数传递。

var squarefuncwithadjustment = function(adjustment, x) {
    return (x*x + adjustment);
}

values.map(squarefuncwithadjustment.bind(null, 2)); // [3, 6, 11, 18]

.bind的第一个参数设置了调用上下文,这与此无关,所以我使用了null.bind的第二个参数将2绑定为调用时的第一个参数。

将函数存储为绑定版本可能更好。

var squareFuncWith2 = squarefuncwithadjustment.bind(null, 2);

然后将其与.map一起使用。

values.map(squareFuncWith2); // [3, 6, 11, 18]

答案 4 :(得分:4)

嘛!!您可以轻松地将第二个参数传递给地图功能。以下方法广泛用于传递此参数,该参数通常在调用期间隐藏:

SelectedItem
  

OR

Combobox -> Installer

答案 5 :(得分:1)

要在单个功能中执行此操作,您可以向咖喱添加一些IIFE。

values

从最抽象的意义上讲,您可以通过调用数组隧道传输adjustment。通过添加IIFE,您可以在闭包中每次都输入assert function_to_test() == {'key': 'value'}

答案 6 :(得分:0)

ES6 +:

values.map( x => squarefuncwithadjustment(x,2) );

答案 7 :(得分:-2)

var squarefuncwithadjustment = (x, adjustment) => { return (x*x + adjustment); }

然后

values = values.map( x => squarefuncwithadjustment(x, 2) );