使用 map() 和一个具有一个附加参数的函数的 JS 回调
JS callback using map() with a function that has one additional parameter
我正在尝试找到一种方法来将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()
,使我们的代码更干净,摆脱这些!
使用匿名函数:
A.map(function(a) {return doOpSingle2(a,theFlag);});
A.map(doOpSingle2.bind(null, theFlag))
不过theFlag
将是第一个参数:
function doOpSingle2( flag, elem ) { ... }
使用匿名函数。
var y = A.map(function(x){doOpSingle2(x,theFlag);});
编辑:没关系,你真的不需要闭包。参见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回调参数
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 从node.js向CasperJS传递参数数组
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- JS和three.JS,在浏览器中进行参数测试
- 如何将一个*参数*从JS传递到AS3
- 参数列表Three.js之后的未捕获语法错误:缺少)
- 建议将包含不同参数的内联JS转换为外部脚本
- 如何在mysql查询(NODE.js)中重复使用一个参数
- 在JS参数中放置引号
- 如何将Gruntfile.js中的参数传递到webdriverio规范
- 如何将.json文件作为参数导入.js文件并使用命令行启动它
- Moment.js不接受变量作为参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- Meteor.js只更新一个参数,而不是整个集合
- 使用应用程序状态js和视图在angular js url上传递两个参数
- 保存上一页参数 js, jsp.
- 将重复出现的代码“外包”到带有参数(js)的函数中
- 如何在我的节点中包含另一个参数.js Web 服务
- 如何获取函数参数'js中的文本值