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
以外の、ループを使用する、複数のor演算子を使用する、または暗黙的にsome(predicate)
を呼び出す、firstMatch
を見つけるよりスマートな方法はありますか?できれば、C#のfilterFirst(pedicate)
実装に似た最初の一致で短絡するJavaScript関数(Enumerable.First()
のようなもの)ですか?
FWIW、node.js/io.jsランタイムをターゲットにしています。
車輪を作り直す必要はありません。正しい方法は .find
を使用することです。
var firstMatch = ['a', 'b', 'c'].find(applyConditions);
.find
をサポートしていないブラウザを使用している場合、 polyfill it
reduce
で最初のtruthy値を返す場合は、これをエミュレートできます。
['a', 'b', 'c'].reduce(function(prev, curr) {
return prev || predicate(curr) && curr;
}, false);
編集: @BenjaminGruenbaumの提案により簡潔になりました