javascript - Wie überspringe ich die nächste Iteration in jQuery.each () util?


Ich versuche, durch eine Reihe von Elementen zu iterieren. In der Dokumentation von jQuery heißt es:

jquery.Each () Dokumentation

Die Rückgabe von non-false ist das gleiche wie eine continue-Anweisung in einer for-Schleife und springt sofort zur nächsten Iteration.

Ich habe versucht, 'return non-false' zu nennen. und 'nicht falsch;' (sans return), von denen keiner zur nächsten Iteration übergeht. Stattdessen brechen sie die Schleife. Was vermisse ich?



Answers


Was sie mit nicht-falsch meinen, ist:

return true;

Also dieser Code:

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

Will alarmieren eins, zwei, vier, fünf




Mit 'return non-false' meinen sie, irgendeinen Wert zurückzugeben, der nicht boolesch falsch wäre. Sie könnten also true , 1 , 'non-false' oder was auch immer Sie sich vorstellen können.




Javascript hat eine Art von "Wahrheit" und "Falschheit". Wenn eine Variable einen Wert hat (in der Regel 9, wie Sie sehen werden), hat sie 'Wahrheit' - Null, oder kein Wert tendiert zu 'Falschheit'. Die folgenden Snippets könnten helfen:

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

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

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

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

Hoffentlich hilft das?

Auch lohnt es sich, diese Videos von Douglas Crockford zu überprüfen

Die Javascript-Sprache

Javascript - Die guten Teile




Vergiss nicht, dass du manchmal einfach vom Ende des Blocks fallen kannst, um zur nächsten Iteration zu gelangen:

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

Anstatt tatsächlich so zurückzukehren:

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



jQuery.noop () kann helfen

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



Die Schleife bricht nur dann , wenn Sie wörtlich false . Ex:

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

Dies bedeutet, dass Sie alles andere zurückgeben können, einschließlich undefined , was Sie zurückgeben, wenn Sie nichts zurückgeben. Daher können Sie einfach eine leere return-Anweisung verwenden:

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

   // otherwise do something
});

Es ist möglich, dass dies je nach Version variieren kann. das gilt für jquery 1.12.4. Aber wirklich, wenn Sie die Unterseite der Funktion verlassen, geben Sie auch nichts zurück, und deshalb fährt die Schleife fort, also würde ich erwarten, dass es keine Möglichkeit überhaupt gibt, dass das Zurückbringen nichts die Schleife nicht fortsetzen konnte. Es sei denn, sie wollen alle dazu zwingen, etwas zurückzugeben, um den Kreislauf in Gang zu halten. Nichts zurückzugeben, muss ein Weg sein, um es am Laufen zu halten.