¿Qué significa la palabra clave "return" dentro de la función "forEach"? [duplicar]

Resuelto Tân asked hace 8 años • 2 respuestas

$('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>
Expandir fragmento

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.

Tân avatar Jan 07 '16 18:01 Tân
Aceptado

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, el forEach()método es la herramienta equivocada.

La terminación anticipada podrá lograrse con:

  • Un bucle sencillo
  • Un forbucleof _
  • Array.prototype.every()
  • Array.prototype.some()
  • Array.prototype.find()
  • Array.prototype.findIndex()

Los otros métodos de matriz: every(), some(), find()y findIndex()prueban los elementos de la matriz con un predicado que devuelve un valor verdadero para determinar si se requiere más iteración.

squaleLis avatar Jan 07 '2016 11:01 squaleLis

Sale returnde la función actual , pero las iteraciones continúan, por lo que obtienes el elemento "siguiente" que se salta ify alerta al 4...

Si necesita detener el bucle, debería utilizar un forbucle 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

Ronen Cypis avatar Jan 07 '2016 11:01 Ronen Cypis