2016-04-04 14 views
4

for-Schleifen in Javascript verschachtelt ich JavaScript im Moment auf freecodecamp lernen und sie haben ein Beispiel für in einem ihrer excercises für Schleifen verschachtelt:Legendes

var arr = [[1,2], [3,4], [5,6]]; 
for (var i=0; i < arr.length; i++) { 
    for (var j=0; j < arr[i].length; j++) { 
    console.log(arr[i][j]); 
    } 
} 

Mit console.log = 1 2 3 4 5 6 undefiniert.

Ich verstehe für Schleifen mehr oder weniger, und ich verstehe, dass [i] und [j] verwendet werden, um auf das Array zugreifen (denke ich?). Ich verstehe einfach nicht, warum am Ende nur diese Zahlen ausgedruckt werden? Ich fand diese Frage vor ein paar Jahren fragte zurück, aber es erklärt, wie sie zu schreiben, nicht, wie sie funktionieren:

For loop in multidimensional javascript array

ich es brach in:

var arr = [ [1,2], [3,4], [5,6]];for (var i=0; i < arr.length; i++) { 
console.log(arr[i]);} 

Welche heraus druckt

[ 1, 2 ] 
[ 3, 4 ] 
[ 5, 6 ] 
undefined 

und

var arr = [ [1,2], [3,4], [5,6]]; 
for (var i=0; i < arr.length; i++) { 
for (var j=0; j < arr[i].length; j++) {  
    console.log(arr[i]); }} 

die ausdruckt:

[ 1, 2 ] 
[ 1, 2 ] 
[ 3, 4 ] 
[ 3, 4 ] 
[ 5, 6 ] 
[ 5, 6 ] 
undefined 

und

var arr = [ [1,2], [3,4], [5,6]]; 
for (var i=0; i < arr.length; i++) { 
    for (var j=0; j < arr[i].length; j++) {  
    console.log(arr[j]); }} 

die ausdruckt

[ 1, 2 ] 
[ 3, 4 ] 
[ 1, 2 ] 
[ 3, 4 ] 
[ 1, 2 ] 
[ 3, 4 ] 
undefined 

ich die ersten beiden arr verstehen [i]. Die Schleife iteriert durch das Array und druckt die einzelnen Elemente (in diesem Fall ein Array) aus und in der zweiten, denke ich, macht es das einfach zweimal, weil es zwei Schleifen gibt. Was ich nicht verstehe, ist:

  1. , warum die letzte Reihe in arr [j] nicht ausgedruckt (? Wo ist die [5, 6] gehen)
  2. warum arr [i] [j ] eliminiert plötzlich die Arrays und nur druckt die Zahlen
  3. wo das kommt mit diesem von

Könnte jemand mir helfen, out ‚undefined‘ und die Schritte erläutern den Code dauert es vor dem Drucken in der Konsole aus? Ich würde es wirklich gerne verstehen, aber ich weiß nicht einmal, wie ich diese Frage richtig finden soll.

+2

Mach dir keine Sorgen über das 'undefined' am Ende; Das ist ein Nebenprodukt davon, wie 'console.log()' den Code interpretiert. – Pointy

+0

Das stimmt nicht. Spitze. Der Grund dafür, dass stellatores am Ende undefiniert wird, liegt darin, dass er i auf der letzten for-Schleife inkrementiert, bevor er die j-Schleife trifft, um die Bedingung zu treffen. For-Schleifen werden immer nur einmal ausgeführt und nur angehalten, wenn eine Bedingung erfüllt ist. In diesem Fall drückt die letzte Schleife i auf 7, und in der Zahlenmatrix gibt es keine 7. Position. Dies führt zu undefiniertem, weil der Array-Position einfach keine Nummer zugewiesen ist. – Korgrue

+0

@ Korgrue nein, Pointy ist richtig. Die i-Schleife läuft nur von 0 bis 2, bevor sie endet. Das 'undefined' ist der Rückgabewert der' for' Anweisung. 'console.log ('Hi')' macht dasselbe: Es gibt 'Hi' und dann undefined aus. – Stuart

Antwort

4
var arr = [[1,2], [3,4], [5,6]]; 

Dies ist ein Array von Arrays. Es ist ein wenig einfacher, so zu lesen:

var arr = [ 
      [1,2], 
      [3,4], 
      [5,6] 
      ]; 

, dass es ein wenig leichter zu sehen, macht, dass Sie eine Reihe von 3-Arrays haben. Das äußere 'for' wird durch jedes der Arrays der 1. Ebene durchlaufen. So ist die erste äußere Schleife, wenn für i = 0 Sie die erste innere Anordnung greifen gehen [1,2]:

for (var i=0; i < arr.length; i++) { 
    //First time through i=0 so arr[i]=[1,2]; 
} 

in der inneren Schleife Sie eine Schleife durch jede der 3 inneren gehen Arrays nacheinander.

for (var j=0; j < arr[i].length; j++) { 
    //Handle inner array. 
} 

Dieses Argument greift die Länge der inneren Anordnung:

arr[i].length 

So auf Sie zum ersten Mal durch die äußere Schleife i = 0 und arr [i] wird sich gleich [ 1,2] weil du das 0te Element ergreifst. Denken Sie daran, Arrays Elemente werden immer gezählt, beginnend bei 0, nicht 1.

Schließlich sind Ausdrucken Sie die Ergebnisse mit:

console.log(arr[i][j]); 

Das erste Mal durch Sie es ein wenig nach unten brechen kann. i = 0 und j = 0. arr [0] [0] was bedeutet, dass das erste Element aus dem äußeren Array und dann das erste Element aus dem ersten inneren Array abgerufen wird. In diesem Fall ist es '1':

[ 
    [1,2], <-- 0 
    [3,4], <-- 1 
    [5,6] <-- 2 
]; 

Der Code wird durch den ersten Schleife ersten Satz [1,2], dann wird die zweite [3,4], und so weiter.

+0

Hab 'es, also mit arr [i] [j] fängst du zuerst die innere Reihe dann das Element innerhalb der inneren Reihe an und druckst es aus, danke! Ihr Array [0] [0] hat darauf geklickt. Und console.log (arr [j]) druckt tatsächlich das letzte innere Array nicht aus, weil es von arr [i] abhängt, welches die inneren Arrays mit einer Länge von zwei sind, so dass der Zähler vor dem dritten Array stoppt. Danke vielmals! – stellatores

1

Die Doppel zur Schleife Sie oben haben, funktioniert wie folgt:

var arr = [[1,2], [3,4], [5,6]]; 

for (var i=0; i < arr.length; i++) { 
    // i = 0, then we loop below: 
    for (var j=0; j < arr[i].length; j++) { 
    //here we loop through the array which is in the main array 
    //in the first case, i = 0, j = 1, then we loop again, i = 0, j = 1 
    console.log(arr[i][j]); 
    //after we finish the stuff in the 'j' loop we go back to the 'i' loop 
    //and here i = 1, then we go down again, i, remains at 1, and j = 0, then j = 1 
    //....rinse and repeat, 
    } 
} 

in einfachem Englisch:

wir das erste Element in dem Hauptarray greifen, die ein Array selbst ist, wir Durchschlinge dies und schreibe bei jedem Index, dies wird durch unsere Längenbedingung in der zweiten Schleife beendet. Wir gehen dann zum nächsten Index des Hauptarrays, der selbst ein Array ist ....und so weiter, bis wir das Ende des Hauptfeldes erreichen

Um auf das Hauptarray zuzugreifen und zu indizieren, müssen wir array[i] verwenden - dieser Index enthält ein Array - um IN dieses Array zu gehen, müssen wir array[i][j] verwenden

Hoffe das macht Sinn!

+0

Spitze ist 100% korrekt über die undefined – JordanHendrix

0
  1. , warum die letzte Reihe in arr [j] wird nicht ausgedruckt (wo haben Sie die [5, 6] gehen?)

Sie können feststellen, dass, wenn Sie j auszudrucken als console.log(j), wird es drucken 6 mal als 0, 1, 0, 1, 0, 1. Und was Sie versuchen zu drucken ist arr[j] die [5, 6] nicht da angezeigt werden, um sein auf arr[2]

  1. warum arr [i] [j] plötzlich beseitigt die Arrays und gerade aus druckt die Zahlen

Wie Sie dort angeben, ist arr eine Reihe von 3-Arrays. arr[i] repräsentiert 3 Arrays entweder [1, 2], [3, 4] oder [5, 6]. Und die in arr[i][j] repräsentiert den Index dieser 3 Arrays. Dies wird Multidimensional Array genannt. arr[i][j] eliminiert das Array nicht, aber es wählt den Wert im Index j innerhalb arr[i] aus.

  1. , wo die 'undefined' kommt aus

Es ist nur Chrom-Ding, wenn Sie console.log verwenden. Chrome gibt immer undefined zurück, wenn Sie dies versuchen. Versuchen Sie es auf Firefox zu tun und Sie werden es nicht mehr sehen.

0

Trotz einiger caveats von for-in-Schleifen auf Arrays verwenden, können sie imo manchmal helfen, das Chaos in verschachtelten Schleifen ein wenig zu löschen:

var arr = [[1,2], [3,4],[5,6]]; 
 

 
for (i in arr){ 
 
     for (j in arr[i]){ 
 
     console.log(arr[i][j]); 
 
     } 
 
    }

Auch code visualization Ausführung klären kann!