JavaScriptfilter首先等同于LINQ的Enumberable.First(谓词)

在C#中,我们有Enumerable.First(predicate) 。 鉴于这个JavaScript代码:

 function process() { var firstMatch = ['a', 'b', 'c'].filter(function(e) { return applyConditions(e); }).shift(); if(!firstMatch) { return; } // do something else } function applyConditions(element) { var min = 97; var max = 122; var random = Math.floor(Math.random() * (max - min + 1) + min); return element === String.fromCharCode(random); } 

除了forEach ,使用循环,使用多个或操作符或隐式调用some(predicate) ,有没有更聪明的方法来findfirstMatch ? 最好是一个类似于C#的Enumerable.First()实现的JavaScript函数(类似filterFirst(pedicate) ),

FWIW,我的目标是node.js / io.js运行时。

不需要重新发明轮子,正确的方法是使用.find

 var firstMatch = ['a', 'b', 'c'].find(applyConditions); 

如果您使用的是不支持.find的浏览器,则可以对其进行 .find

对不起,但这是微不足道的

 function first(array, predicate) { for (var i = 0; i < array.length; ++i) { if (predicate(array[i])) return array[i]; } throw new Error("no match"); } 

可以创build自己的抽象人。

你可以效仿这种情况下,你想返回第一truthy值与reduce

 ['a', 'b', 'c'].reduce(function(prev, curr) { return prev || predicate(curr) && curr; }, false); 

编辑:使@BenjaminGruenbaumbuild议更简洁