que tal cronos!
fíjate que tu algoritmo tiene algo mal. ¿qué sucede si el último elemento del array es un email válido pero tiene uno inválido en los elementos anteriores? es decir, si la cadena fuera la siguiente.
nótese que en la función de
forEach siempre estas guardando en la variable la evaluación del último elemento. si lo hubieras hecho con un
for normal probablemente te hubieras dado cuenta. el problema de
forEach es que a diferencia del resto de los bucles, este no se puede detener. en este caso sería más adecuado romper el ciclo y de inmediato indicar que la cadena no es válida. por tanto hay que agregar un algoritmo adicional para ese propósito. el que se me habia ocurrido para este caso particular era usando operadores bitwise de forma que si la evaluacion devuelve falso, el resto tambien lo seran.
Código:
var ok = true;
array.forEach(function(v){
ok &= regexp.test(v);
});
Boolean(ok);
no obstante, este método evlua todos los elementos, es decir no rompe el ciclo. la forma que encontre para romper el ciclo fue mediante excepciones y try/catch. por ejemplo...
Código:
function fn(){
try{
"asdfghjklqwertyuiopzxcvbnm".split('').forEach(function(v,k,a){
if(v == ';') throw new Error('Stop forEach iteration.');
});
} catch(e){
return false;
}
return true;
}
console.log(fn());