duc*_*cin 39 javascript collections functional-programming underscore.js
我想实现像_.first用_.filter,即具有元素的集合,我想获得的第一个(如果存在的话)匹配了一个道理测试(迭代器).
例如,给定如下数组:
var arr = [{a: 1}, {a: 5}, {a: 9}, {a: 11}, {a: 15}]
Run Code Online (Sandbox Code Playgroud)
我想获得与我的自定义函数匹配的第一个(也是唯一的第一个)元素:
_.filterFirst(arr, function(el) { return el.a > 10; }); // make it
Run Code Online (Sandbox Code Playgroud)
至今:
_.first(arr) == {a:1}
_.filter(arr, function(...)) == [{a:11}, {a:15}]
Run Code Online (Sandbox Code Playgroud)
有没有一个干净的解决方案,这样做比哪个好_.first(_.filter(arr, iterator))?
Tah*_*san 76
你可以使用find:
查看列表中的每个值,返回通过真值测试(迭代器)的第一个值,如果没有值通过测试,则返回undefined.该函数在找到可接受的元素后立即返回,并且不会遍历整个列表.
使用你的例子:
var g = _.find(arr, function (x) { return x.a > 10 })
Run Code Online (Sandbox Code Playgroud)
请参见主页:http://underscorejs.org
另一件需要注意的事情(可能是你的问题)是将chain呼叫连接在一起的功能:
var g = _.chain(arr).filter(function (x) { return x.a > 10 }).first().value()
Run Code Online (Sandbox Code Playgroud)
注意调用filter和'first'可以相互跟随而不需要任何嵌套.