Pregunta

Estoy tratando de iterar a través de una matriz de elementos. La documentación de jQuery dice:

jquery.Each () documentación

  

Devolver no falso es lo mismo que una declaración de continuación en un ciclo for, saltará inmediatamente a la siguiente iteración.

He intentado llamar a 'return non-false;' y 'no falso'; (sin retorno) ninguno de los cuales salta a la siguiente iteración. En cambio, rompen el ciclo. ¿Qué me estoy perdiendo?

¿Fue útil?

Solución

Lo que quieren decir con no falso es:

return true;

Entonces este código:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

Alertará a uno, dos, cuatro, cinco

Otros consejos

Por 'return non-false', significan devolver cualquier valor que no funcionaría en boolean false. Por lo tanto, puede devolver true, 1, 'non-false' o cualquier otra cosa que pueda pensar.

Javascript tiene la idea de "veracidad" y "falsedad". Si una variable tiene un valor, generalmente, como verá, tiene "veracidad": nula o ningún valor tiende a "falsedad". Los fragmentos a continuación pueden ayudar:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

¿Espero que eso ayude?

Además, vale la pena ver estos videos de Douglas Crockford

actualización: gracias @cphpython por detectar los enlaces rotos. He actualizado para señalar las versiones que funcionan ahora

El lenguaje Javascript

Javascript - Las buenas partes

No olvide que a veces puede caerse del final del bloque para pasar a la siguiente iteración:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

En lugar de volver realmente así:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});

El bucle solo se rompe si regresa literalmente false. Ej:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

Esto significa que puede devolver cualquier otra cosa, incluido undefined, que es lo que devuelve si no devuelve nada, por lo que simplemente puede usar una declaración de devolución vacía:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

Es posible que esto varíe según la versión; Esto es aplicable para jquery 1.12.4. Pero en realidad, cuando sale de la parte inferior de la función, tampoco está devolviendo nada, y es por eso que el ciclo continúa, por lo que esperaría que no haya ninguna posibilidad de que devolver nada no continúe lazo. A menos que quieran obligar a todos a comenzar a devolver algo para mantener el ciclo en marcha, devolver nada tiene para ser una forma de mantenerlo en marcha.

jQuery.noop () puede ayudar

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top