【发布时间】:2011-04-26 03:09:00
【问题描述】:
使用Underscore.js,我可以编写以下返回42:
_([42, 43]).chain()
.first()
.value()
我有自定义函数,不是 Underscore.js 的一部分,称为 double():
function double(value) { return value * 2; };
我希望能够在 Underscore 链中调用此函数,就好像它是 Underscore 的一部分一样。我想写以下内容,我想返回84:
_([42, 43]).chain()
.first()
.double()
.value()
这不起作用,因为下划线没有定义double()。我可以使用tap():
_([42, 43]).chain()
.first()
.tap(double)
.value()
这是有效的,但tap 将函数应用于其参数并返回参数,而不是函数的结果。所以在我看来,我需要一种tap,它返回应用于其参数的函数的结果。 Underscore.js 中有这样的东西吗?我是否遗漏了一些非常明显的东西?
【问题讨论】:
-
请注意,
double是 future reserved word,如果将其用作标识符,实现可能会抛出SyntaxError。 -
Alessandro,你有没有发现我给了你这个问题的唯一正确答案?我列出的内容根本不会污染下划线命名空间。 underscore.js 库预测了您的要求,并为此内置了一个功能。
-
Underscore 现在同时具有
tap(运行一个修改每个项目的函数)和map(运行一个返回新项目的函数)。 -
@CMircea 截至 2014 年 8 月 25 日,我没有看到任何迹象表明
tap()可用于修改包装对象。我错过了什么吗? underscorejs.org/#tap
标签: javascript functional-programming underscore.js