72

我知道我可以通过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);
}

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

4

8 回答 8

110

使用匿名函数:

values.map(
  function(x) { return squarefuncwithadjustment(x, 2); }
);
于 2012-09-10T00:22:59.820 回答
48

您可以使用回调创建函数:

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]
于 2012-09-10T00:25:06.230 回答
31

从 ES6 开始,您可以使用:

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

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

values = [1,2,3,4]
values.map(n => squarefuncwithadjustment(n, 3))
于 2017-03-28T05:58:49.400 回答
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]
于 2012-09-10T00:29:40.073 回答
5

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

values.map(function(x , this) {
    return x*x + this.adjustment;
});

var adjustment = 1;
var values = [1,2,3,4]
values.map(function(x , adjustment) {
    return x*x + adjustment;
});

或者

var adjustment = 1;
var squarefunc = function(x , adjustment) {
    return x*x + adjustment;
};
values = [1,2,3,4]
values.map(squarefunc);
于 2016-08-04T11:03:18.343 回答
1

要在单个函数中执行此操作,您可以在 Curry 中添加一些 IIFE。

function mapSingleFunc(values, adjustment) {
  return values.map((adjustment => x => (x * x) + adjustment)(adjustment));
};
console.log(mapSingleFunc([1,2,3,4], 2))

在最抽象的意义上,您可以values通过调用数组来隧道。添加 IIFE 允许您adjustment在每次关闭时输入。

于 2018-02-19T07:50:39.450 回答
1

ES6+:

values.map( x => squarefuncwithadjustment(x,2) );
于 2018-12-25T19:32:55.113 回答
-2

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

然后

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

于 2017-07-14T19:23:41.840 回答