获取与迭代器函数匹配的集合的第一个元素

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'可以相互跟随而不需要任何嵌套.

  • 正是!`_find`是我需要的! (2认同)