使用地图()与具有一个另外的参数[重复]的函数JS回调(JS callback using map(

2019-06-25 03:43发布

这个问题已经在这里有一个答案:

  • 通过一个额外的参数回调函数 4个回答

我试图找到一种方法,使用JS的Array.prototype.map()的功能与具有一个附加参数更多的功能(如果可能的话,我想避免重写内置Array.prototype.map() 本文档是非常好的,但不包括“一个或者更多的附加参数”的情况下:

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

到现在为止还挺好。 但是,如果有问题的函数有两个参数,例如像一个标志,你可能会想,或将其(考虑位掩码)

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!

任何解决方案,而不应该做for循环,当然,因为这就是为什么我们有map()使我们的代码更加清晰W /摆脱这些!

Answer 1:

可以使用匿名函数:

A.map(function(a) {return doOpSingle2(a,theFlag);});


Answer 2:

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

theFlag将是第一个参数,但:

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



Answer 3:

可以使用匿名函数。

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


Answer 4:

编辑:没关系,你真的不需要关闭此。 见Esailija的答案。

还有另一种选择,如果你碰巧使用的封库 。 首先,你必须重写doOpSingle2而标志是第一:

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

那么你可以做

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

goog.partial 部分应用的功能,所以goog.partial(doOpSingle2, theFlag)等同于这样的功能:

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

在这种特殊情况下,我可能不会推荐这种方法,但也有可能是在那里工作得很好类似的情况。



文章来源: JS callback using map() with a function that has one additional parameter [duplicate]