Вопрос по arrays, javascript, callback – Обратный вызов JS с использованием map () с функцией, имеющей один дополнительный параметр [duplicate]

8

This question already has an answer here:

Я пытаюсь найти способ использовать JSArray.prototype.map() функциональность с функцией, у которой есть еще один дополнительный параметр (если вообще возможно, и я бы хотелavoid необходимость переписать встроенныйArray.prototype.map()). This documentation is very good, but does not cover the "one-or-more-additional-parameter" case:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

function doOpSingle(elem)
{
 // do something with one array element
}

var A = ["one", "two", "three", "four"];
var x = A.map(doOpSingle); // this will execute doOpSingle() on each array element

Все идет нормально. Но что, если функция имеетtwo параметры, такие как е. г. флаг, который вы, возможно, захотите ИЛИ (подумайте о битовых масках)

function doOpSingle2(arrelem,flag)
{
 // do something with one array element
}

var A = ["one", "two", "three", "four"];
var theFlag = util.getMask(); // call external function
var y = A.map(doOpSingle2(theFlag)); // this does not work!

Любые решения должны делатьwithout for петли, конечно, потому что именно поэтому мы имеемmap(), чтобы сделать наш код чище, избавляясь от них!

Ваш Ответ

4   ответа
15

A.map(doOpSingle2.bind(null, theFlag))

theFlagError: User Rate Limit Exceeded

function doOpSingle2( flag, elem ) { ... }

Error: User Rate Limit Exceeded syntaxerror
1

var y = A.map(function(x){doOpSingle2(x,theFlag);});
1

function doOpSingle2(flag, arrelem)
{
 // do something with one array element
}

var y = A.map(goog.partial(doOpSingle2, theFlag));

partially appliesgoog.partial(doOpSingle2, theFlag)

function(arrElem) {
  return doOpSingle2(theFlag, arrElem);
}

Error: User Rate Limit Exceededsome people do ;).
Error: User Rate Limit ExceededrealError: User Rate Limit Exceeded syntaxerror
Error: User Rate Limit Exceeded.bindError: User Rate Limit Exceeded
18

A.map(function(a) {return doOpSingle2(a,theFlag);});
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded syntaxerror

Похожие вопросы