javascript - Come saltare alla prossima iterazione in jQuery.each () util?


Sto cercando di scorrere attraverso una serie di elementi. La documentazione di jQuery dice:

documentazione jquery.Each ()

Restituire non-false equivale a un'istruzione continue in un ciclo for, salterà immediatamente alla successiva iterazione.

Ho provato a chiamare 'return non-false;' e 'non falso;' (senza ritorno) nessuno dei due salta alla successiva iterazione. Invece, rompono il ciclo. Cosa mi manca?



Answers



Cosa intendono per non-falso è:

return true;

Quindi questo codice:

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

Avverrà uno, due, quattro, cinque




Con 'return non-false', intendono restituire qualsiasi valore che non funzionerebbe con il valore booleano false. Quindi potresti restituire true , 1 , 'non-false' o qualsiasi altra cosa tu possa pensare.




Javascript ha l'idea di "verità" e "falsità". Se una variabile ha un valore allora, generalmente vedrai) ha 'verità' - null, o nessun valore tende a 'falsità'. I frammenti di seguito potrebbero aiutare:

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

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

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

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

Speriamo che questo aiuti?

Inoltre, vale la pena controllare questi video di Douglas Crockford

La lingua Javascript

Javascript - Le parti buone




Non dimenticare che a volte puoi semplicemente cadere dalla fine del blocco per passare alla successiva iterazione:

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

Invece di tornare in questo modo:

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



jQuery.noop () può aiutare

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});



Il ciclo si interrompe solo se ritorni letteralmente false . Ex:

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

Ciò significa che puoi restituire qualsiasi altra cosa, inclusa la undefined , che è ciò che ritorni se non restituisci nulla, quindi puoi semplicemente usare una dichiarazione di reso vuota:

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

   // otherwise do something
});

È possibile che questo potrebbe variare in base alla versione; questo è applicabile a jQuery 1.12.4. Ma in realtà, quando esci dal fondo della funzione, non restituisci nulla, ed è per questo che il ciclo continua, quindi mi aspetto che non ci sia alcuna possibilità che restituire nulla non possa continuare il ciclo. A meno che non vogliano costringere tutti a iniziare a restituire qualcosa per mantenere il ciclo, il ritorno di nulla deve essere un modo per continuare.