72

map次の方法で、1 つの変数の関数を使用できることを知っています。

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値を取得したいとします。xvalues

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 に答える
7

引数の順序を逆にすると、調整を最初の引数としてバインドできるため、xが2番目の引数として渡されます。

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

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

呼び出しコンテキストを設定する最初の引数.bindはここでは重要ではないため、を使用しnullました。呼び出されたときに最初の引数として.bindバインドする2番目の引数。2

関数をバインドされたバージョンとして保存する方がよい場合があります。

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

次に、で使用し.mapます。

values.map(squareFuncWith2); // [3, 6, 11, 18]
于 2012-09-10T00:29:40.073 に答える
5

良い!!2 番目のパラメーターを 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

ES6+:

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