2016-11-30 23 views
-1

Ich habe den folgenden Codefalsche Rückkehr aus einer anderen Klausel

elements.filter(function(_, e){ 
    terms.forEach(function(term) { 
    returnValue = true; 
    if(...) { 
    } else { 
     returnValue = false; 
    } 
    }) 
    return returnValue; 
}) 

und ich frage mich, ob es eine sauberere Möglichkeit zu return false direkt von der else Klausel ist stattdessen eine temporäre Variable zu verwenden, da es eine Art ist ärgerlich, gezwungen zu werden, returnValue zu verwenden.

Dank

+0

Sie eher falsch zurückgeben können als mit einer Fahne/temp variable –

+0

aber er will auch den wahren Wert zurück in Fall ist es wahr – GraveyardQueen

+3

, dass forEach würde der Wert nach der letzten Iteration, jedes Mal (wenn nicht andere Logik nicht angezeigt, überschreibt das) ... versuchen Array 'jede' Methode - wie für die Kommentare oben ... in einem Rückkehr ' forEach ist NICHT die Antwort, da die Rückgabe in forEach die forEach nicht stoppt oder bewirkt, dass die containing-Funktion –

Antwort

2

Verwenden array#every - die Seite polyfill für ältere Browser hat

elements.filter(function(_, e) { 
    return terms.every(function(term) { 
     if (...) { 
      ... 
      return true; 
     } else { 
      return false; 
     } 
    }); 
}) 

Beachten Sie, dass return term.every....

Array#every den Rückruf ruft bis der Rückruf false zurückgibt, in diesem Fall der Wert zurückgegeben von Array#every wird falsch sein, wenn alle Iterationen den Wert true zurückgeben, wird der von Array#every zurückgegebene Wert true ... also jede Rückkehr muss wahr sein, damit es wahr zurück, andernfalls gibt sie false zurück und stoppt

+0

Vielen Dank für Ihre Antwort, bitte korrigieren Sie mich, wenn ich falsch liege, aber in Ihrem Fall, ich true wahr, wenn der erste Begriff wahr ist, aber ich möchte wahr zurückkehren, wenn alle Begriffe wahr sind. – macsig

+0

Danke für den Hinweis, ich habe es verpasst;) – macsig

+0

Nein, das 'return true' hält die Schleife am Laufen - wie Sie vagen Code gepostet haben, kann ich nicht hilfreicher sein als der obige Code ... was ist der Zustand? ? Was machst du, wenn die Bedingung wahr ist? unbekannt in der Frage, also habe ich mein Bestes in der Angst gegeben –

0

Warum nicht einfach return false; vom forEach Sache Iterieren? Es sei denn, Sie haben durchlaufen alle Elemente mindestens einmal vor der Rückkehr. Dadurch sollten Sie die Verwendung der zusätzlichen Variablen überspringen.

Und man kann tatsächlich der nutzlos, wenn Block loszuwerden durch den Ausdruck negieren

if(!your-expression) 
    { 
    return false; 
    } 
    return true; 
+2

das if/else ist innerhalb eines '.forEach' - Rückgabewert von' .forEach' wird ignoriert –

Verwandte Themen