Come saltare alla prossima iterazione in util jQuery.each ()?
-
20-08-2019 - |
Domanda
Sto cercando di scorrere attraverso una serie di elementi. La documentazione di jQuery dice:
Restituire non-false è lo stesso di 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 quali passa alla successiva iterazione. Invece, interrompono il ciclo. Cosa mi sto perdendo?
Soluzione
Cosa significano 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]);
});
Avverterà uno, due, quattro, cinque
Altri suggerimenti
Per 'return non-false', significano restituire qualsiasi valore che non funzionerebbe in false booleane. Quindi potresti restituire true
, 1
, 'non-false'
o qualsiasi altra cosa tu possa pensare.
Javascript ha in qualche modo l'idea di "verità" e "falsità". Se una variabile ha un valore allora, generalmente 9 come vedrai) ha "verità" - nulla o nessun valore tende a "falsità". I frammenti di seguito potrebbero essere utili:
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 aiuti?
Inoltre, vale la pena dare un'occhiata a questi video di Douglas Crockford
aggiornamento: grazie @cphpython per aver individuato i collegamenti non funzionanti - ho aggiornato per puntare alle versioni funzionanti ora
Non dimenticare che a volte puoi semplicemente cadere dalla fine del blocco per arrivare alla prossima iterazione:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
Invece di tornare effettivamente in questo modo:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
Il ciclo solo si interrompe se ritorni letteralmente false
. Es:
// 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, incluso undefined
, che è ciò che restituisci se non restituisci nulla, quindi puoi semplicemente utilizzare un'istruzione di reso vuota:
$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration
// otherwise do something
});
È possibile che ciò possa variare in base alla versione; questo è applicabile per jquery 1.12.4. Ma davvero, quando esci dalla parte inferiore della funzione, non stai anche restituendo nulla, ed è per questo che il ciclo continua, quindi mi aspetto che non ci sia alcuna possibilità che la restituzione di nulla non possa non continuare il ciclo continuo. A meno che non vogliano costringere tutti a iniziare a restituire qualcosa per continuare il ciclo, non restituendo nulla deve essere un modo per farlo andare avanti
jQuery.noop () può aiutarti
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});