En C #, nous avons Enumerable.First(predicate)
. Compte tenu de ce code 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);
}
autre que forEach
, en utilisant une boucle, en utilisant plusieurs opérateurs ou ou en appelant implicitement some(predicate)
, existe-t-il un moyen plus intelligent de trouver le firstMatch
? De préférence une fonction JavaScript (quelque chose comme filterFirst(pedicate)
) qui court-circuite sur la première correspondance ressemblant à l'implémentation de Enumerable.First()
de C #?
FWIW, je cible les runtimes node.js/io.js.
Pas besoin de réinventer la roue, la bonne façon de le faire est d'utiliser .find
:
var firstMatch = ['a', 'b', 'c'].find(applyConditions);
Si vous utilisez un navigateur qui ne prend pas en charge .find
vous pouvez remplissez-le
Vous pouvez émuler ceci dans le cas où vous souhaitez renvoyer la première vérité valeur avec reduce
.
['a', 'b', 'c'].reduce(function(prev, curr) {
return prev || predicate(curr) && curr;
}, false);
edit: rendu plus concis avec la suggestion @BenjaminGruenbaum