我试图找到一种方法来使用JS的Array.prototype.map()
功能,并使用一个附加参数更多的功能(如果可能的话,我想要<\ n)< em>避免必须重写内置Array.prototype.map()
)。
这个文档非常好,但不包括&#34;一个或多个附加参数&#34;情况下:
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
到目前为止,这么好。 但是,如果所讨论的函数具有两个参数,例如e。 G。你可能想要的一个标志OR(想想位掩码)
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()
,以使我们的代码更清洁/摆脱这些!
答案 0 :(得分:18)
使用匿名函数:
A.map(function(a) {return doOpSingle2(a,theFlag);});
答案 1 :(得分:15)
A.map(doOpSingle2.bind(null, theFlag))
theFlag
将是第一个参数:
function doOpSingle2( flag, elem ) { ... }
答案 2 :(得分:1)
使用匿名函数。
var y = A.map(function(x){doOpSingle2(x,theFlag);});
答案 3 :(得分:1)
编辑:没关系,你真的不需要Closure。见Esailija的回答。
如果您正好使用Closure library,还有另一种选择。首先,你必须重写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);
}
在这种特殊情况下,我可能不会推荐这种方法,但可能会出现类似的情况。