Domanda

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

jquery.Each () documentazione

  

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?

È stato utile?

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

Il linguaggio Javascript

Javascript - The Good Parts

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}
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top