2017-03-11 1 views
-1

Ich habe diese Übung, die bereits die Antwort bekommen, aber nach dem Hören der Erklärungen, immer noch nicht verstehen. Dies ist die Aufgabe:Javascript: For Loop, brauche Hilfe beim Verständnis dieser Übung mit if/else

"eine Funktion isUniform write(), die ein Array als Argument und true zurück kommt, wenn alle Elemente in der Anordnung identisch sind"

Dies ist die Lösung

function isUniform(numArr) { 
    var first = numArr[0]; 
    for (var i = 1; i < numArr.length; i++) { 
    if (numArr[i] !== first) { 
     return false; 
    } 
    } 
    return true; 
} 

Ich habe es fast richtig, aber ich habe eine andere Aussage mit der "Rückkehr wahr" und es hat nicht funktioniert. Warum funktioniert es mit dem "return true" außerhalb der for-Schleife? (bearbeitet) Dies ist, wie ich das erste Mal tat:

function isUniform(numArr) { 
    var first = numArr[0]; 
    for (var i = 1; i < numArr.length; i++) { 
    if (numArr[i] !== first) { 
     return false; 
    } 
    else { 
     return true; 
    } 
    } 
} 
+0

bitte kopieren Sie auch die andere Lösung. nur um zu vergleichen ... aber immer noch das ist immer das erste Element mit dem Rest des Arrays vergleichen ... –

Antwort

1

ausgelöst werden, wenn Sie zurückkommen außerhalb der Schleife wahr ist, dann überprüft er jedes Element in der Schleife, bis man die Spiele if Test oder es bis zum Ende bekommt der Schleife.

Wenn Sie in der Schleife True zurückgeben, wird immer eine return-Anweisung für das erste Element ausgegeben und dann die Schleife gestoppt.

+0

ok, das macht Sinn. Ich hatte ein falsches Verständnis davon, wie die Schleife funktionierte. Ich dachte, dass es die gesamte Schleife überprüfen würde, um zu bewerten, ob es wahr oder falsch war. Aber was passiert ist, dass es aufhört, sobald er eine der Aussagen trifft. Zum Beispiel, wenn ich [1, 1, 1, 3] habe, würde es berücksichtigen, dass, da das zweite Element gleich ist, es wahr ist. – fields

+0

Was ist, wenn ich eine While-Schleife gemacht habe? while (numArr [i] === zuerst) {return true; i ++} console.log ("false"); Würde das funktionieren? – fields

+1

@fields das macht keinen Sinn. Sie können die Iteration innerhalb einer 'for',' while' oder 'do..while' Schleife mit' continue' und 'break' unterbrechen oder steuern, aber' return' wird immer die Funktion beenden. Die obige Lösung funktioniert, weil sie sofort fehlschlägt, wenn ein nicht übereinstimmender Wert gefunden wird, oder, wenn die 'for'-Schleife von selbst beendet wird, angenommen wird, dass kein nicht übereinstimmender Wert gefunden wurde. –

0

Es funktioniert, weil die letzte Anweisung in der Funktion ist. Grundsätzlich wird Ihre Funktion true zurück, wenn der Zustand im Inneren für Schleife nicht

1

Ich habe fast richtig, aber ich habe eine andere Aussage mit dem „ return true“ und es hat nicht funktioniert

Die Lösung unter den falschen Ergebnisse in einigen Fällen, weil alle zurückkehren würde es ist das erste Element innerhalb des Arrays, das gleichfirst Variable ist und True zurückgibt, obwohl es nicht das gesamte Array durchsucht hat.

function isUniform(numArr) { 
     var first = numArr[0]; 
     for (var i = 1; i < numArr.length; i++) { 
     if (numArr[i] !== first) { 
      return false; 
     } 
     else { 
      return true; 
     } 
     } 
    } 

Ich habe diese Übung, die bereits die Antwort bekam, aber die Erklärungen nach Anhörung, immer noch nicht verstehen.

nehmen wir an, dies ist Ihr Array:

[10,10,13,10,10] 

nehmen wir an, dies ist die Variable first:

first = 10; 

Die if statement unten, die innerhalb des for loop ist im Grunde sagt, wenn die Variable first (10) ist ungleich dem Element am aktuellen Index i (nth Nummer innerhalb des Arrays) dann return false. Dies ist sinnvoll, weil die Variable first in diesem Moment nicht mit dem Element index zum Beispiel index 2 (number 13) identisch ist, dann hat es keinen Sinn weiterzumachen. Daher wird es return falsch.

if (numArr[i] !== first) { 
    return false; 
} 

jetzt lassen Sie uns das Array übernehmen ist:

[10,10,10,10,10] 

nehmen wir an, dies ist die Variable first:

first = 10; 

jetzt die Variable first wird gegen jede element innerhalb der Matrix verglichen werden und es heißt "ist 10 nicht gleich dem aktuellen Element". In diesem Fall ist das falsch, weil 10 is equal to 10. Dies wird sich in dem Array fortpflanzen und die Kontrolle wird niemals innerhalb des if-Blocks passieren. Schließlich geht die Kontrolle auf die return wahre Aussage über.

if (numArr[i] !== first) { 
    return false; 
} 
0

Nehmen wir an, Sie haben einen kaputten Drucker, der den Ausdruck hin und wieder durcheinanderbringt. Jetzt haben Sie 20 Exemplare gedruckt und möchten wissen, ob jedes Papier in Ordnung ist. Jetzt müssten Sie also jede Kopie iterativ vergleichen, bis Sie eine gefunden haben, die nicht übereinstimmt (und wissen, dass es Zeit ist, einen neuen Drucker zu bekommen?). Oder du bist den Weg durch den Lochstapel gegangen und weißt, dass jede Kopie in Ordnung ist (und du hast Zeit für nichts verloren).

Verwandte Themen