Подтвердить что ты не робот

Использование карты 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);
}

где, я хочу ввести значение для аргумента adjustment вручную, когда я вызываю карту, скажем adjustment=2, и имеет значение x, взятое из массива values.

4b9b3361

Ответ 1

Использовать анонимную функцию:

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

Ответ 2

Вы можете использовать функцию создания обратного вызова:

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]

Ответ 3

Если вы измените порядок своих аргументов, вы можете привязать настройку в качестве первого аргумента, так что 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

Начиная с ES6 вы можете использовать:

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

Ответ 5

Ну!! Вы можете легко передать второй параметр функции карты. Следующий метод широко используется для передачи этого параметра, который обычно скрывается во время вызова:

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);

Ответ 6

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

Тогда

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