¿Qué significa la palabra clave "return" dentro de la función "forEach"? [duplicar]
$('button').click(function () {
[1, 2, 3, 4, 5].forEach(function (n) {
if (n == 3) {
// it should break out here and doesn't alert anything after
return false
}
alert(n)
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>
Mi pregunta: ¿Por qué sigue avisando al siguiente número aunque llamo return
? Es como: Ignora el código siguiente y continúa con el siguiente elemento.
De la red de desarrolladores de Mozilla :
No hay otra forma de detener o romper un
forEach()
bucle que no sea lanzando una excepción. Si necesita ese comportamiento, elforEach()
método es la herramienta equivocada.La terminación anticipada podrá lograrse con:
- Un bucle sencillo
- Un
for
bucleof
_Array.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()
Los otros métodos de matriz:
every()
,some()
,find()
yfindIndex()
prueban los elementos de la matriz con un predicado que devuelve un valor verdadero para determinar si se requiere más iteración.
Sale return
de la función actual , pero las iteraciones continúan, por lo que obtienes el elemento "siguiente" que se salta if
y alerta al 4...
Si necesita detener el bucle, debería utilizar un for
bucle simple como este:
$('button').click(function () {
var arr = [1, 2, 3, 4, 5];
for(var i = 0; i < arr.length; i++) {
var n = arr[i];
if (n == 3) {
break;
}
alert(n);
})
})
Puede leer más sobre js break y continuar aquí: http://www.w3schools.com/js/js_break.asp