Casablanca: Arrays

Hallo Forum,

ich habe da eine peinliche Frage.

  
var InPr = [ [0.0, 85.0], [10.0, 87.4], [20.0, 90.0], [30.0, 91.3] ]  

Ich kenne mich nicht so gut mit javascript aus. Ist das ein zweidimensionales Array oder ein zweidimensionales Array in einem anderen Array? Wie kann man die Variable "InPr" in einer Schleife am besten füllen?

Gruß

  1. Meine Herren!

    Ich kenne mich nicht so gut mit javascript aus.

    Für den Anfang solltest du dich mit dem Unterschied zwischen Java und JavaScript vertraut machen, das lässt unsereiner nicht ganz so blöd dastehen, wenn wir eine Frage haben ;)

    var InPr = [ [0.0, 85.0], [10.0, 87.4], [20.0, 90.0], [30.0, 91.3] ]

      
    
    > Ist das ein zweidimensionales Array oder ein zweidimensionales Array in einem anderen Array?  
      
    Das ist ein zweidimensionales Array. Anders formuliert: Das ist ein Array, dessen Einträge wiederum aus Arrays bestehen. Die Dimension kannst du ermitteln indem du die öffnenden eckigen Klammern zählst, bis eine schließende Klammer auftauch.  
      
    Du hast dich verwirren lassen, weil die inneren Arrays (zum Beispiel `[0.0, 85.0]`{:.language-javascript}) aus zwei Einträgen bestehen. Aber die Anzahl der Einträge hat nichts mit der Dimension zu tun.  
      
    Hier ist ein Beispiel für ein Array, der Dimension 3 und mit 1 Element: `[[[42]]]`{:.language-javascript}  
    Und hier ist ein Array der Dimension 1 mit 3 Elementen: `[0,1,2]`{:.language-javascript}  
      
    Ich hoffe der Unterschied wird deutlich.  
      
    
    > Wie kann man die Variable "InPr" in einer Schleife am besten füllen?  
      
    Da gibt es verschiedene Ansätze mit unterschiedlichen Vor- und Nachteilen, für dich ist vermutlich eine einfache for-Schleife die passende Wahl:  
      
    ~~~javascript
    for ( var i = 0; i < InPr.length; i++ ) {  
       InPr[ i ] = 42; // Oder was immer du willst  
    }
    

    Die Schleife würde 4 mal ausgeführt werden. Für jedes innere Array im äußeren Array genau ein mal.

    Wenn du lieber eine Schleife haben willst, die einmal jeden Eintrag in jedem inneren Array besucht, dann kannst du auch zwei Schleifen verschachteln:

    for ( var i = 0; i < InPr.length; i++ ) {  
       var inneresArray = InPr[ i ]; // Zum Beispiel: [0.0, 85.0] oder [10.0, 87.4]  
       for ( var j = 0; j < inneresArray.length; j++ ) {  
          var einzelnerEintrag = inneresArray[ j ]; // zum Beispiel 0.0 oder 85.0 oder 10.0  
          alert( einzelnerEintrag ); // Test-Ausgabe, um zu sehen was passiert  
          inneresArray[ j ] = 42; // Oder eine Zuweisung deiner Wahl  
      
       }  
    }
    

    Eine ganz andere Methode, wäre die Methode forEach zu nutzen:

    InPr.forEach( function( wert, i, array ) {  
       // i ist wieder eine Zählvariable, die die Postion im Array angibt  
       // wert sind wieder die Einträge des äußeren Array, also z.B: [0.0, 85.0]  
       // array ist das äußere Array selber.  
       array[ i ] = 42; // Oder was immer dir gefällt.  
    });
    

    Analog zu der Schleife, lässt sich auch dieser Ansatz erweitern, um jedes einzelne Zahl zu erreichen:

    InPr.forEach( function( äußererWert, i, äußeresArray ) {  
       äußererWert.forEach( function ( innererWert, j, inneresArray ) {  
          // inneresArray ist hier das gleiche wie äußererWert  
          alert( innererWert ); // Test-Ausgabe, um zu sehen was passiert.  
       });  
    });
    

    Wenn dir das noch zu kompliziert vorkommt, mach dir erstmal nichts draus und kümmere dich zu erst mal um die Version mit der for-Schleife ;)

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Hi,

      vielen Dank. Ich bin tatsächlich etwas verwirrt :-). Wie werden da die Werte zugewiesen, wenn du schreibst "Zum Beispiel: [0.0, 85.0] oder [10.0, 87.4]"? Etwa so?

        
      var inneresArray = InPr[ i ];  --> var inneresArray = [0.0, 85.0];  
      
      

      Muss das innere Array danach in ein äußesers Array gepackt werden? Wie kann ich erst mal die "var InPr" bilden. Das ist mir wichtig, um das Ganze besser verstehen zu können.

      Gruß

      1. Meine Herren!

        Ich bin kein guter Erklärer, wenn es um so elementare Dinge geht, hast du vielleicht Kenntnisse in anderen Programmiersprachen? Dann kann ich mich vielleicht daran aufhängen, um eine Erklärung zu finden. Ansonsten musst du dich selber mit den elementaren Charakteristiken von Array befassen. Arrays sind ein wichtiges Konzept der Programmierung, das sich von Programmiersprache zu Programmiersprache stark unterscheiden kann, aber am Ende geht es immer darum eine lose Sammlung von Elementen zu erzugen.

        Ansonsten, ist hier einfach mal eine stupide Auflistung von elementaren Array-Operationen in JavaScript:

        // Array erzeugen:  
        var myArray = [];  
        // Array mit Zahlen von 1 bis 5 erzeugen  
        var myArray = [1,2,3,4,5];  
        // Array an der Stelle 3 auslesen  
        alert( array[3] ); // gibt 3 aus  
        // Array an der Stelle 3 überschreiben  
        array[3] = 42;  
        // Wir lesen nochmal die Stelle 3 aus  
        alert( array[3] ); // gibt diesmal 42 aus  
        // Ein Array kann nicht nur Zahlen beinhalten, sondern zum Beispiel auch Texte  
        var myArray = ['hello','world'];  
        // Und wir lesen nochmal aus  
        alert( myArray[1] ); // gibt uns 'world'  
        // Und statt texten können die Einträge auch selbst wieder Arrays sein  
        var myArray = [  
           ['Hello','World'],  
           [42,1337]  
        ];  
        
        
        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Hi,

          danke. Ich gluabe ich habe mich falsch geäußert. Ich möchte nur wissen, wie man zunächst mal das Array aufbaut:

            
              for (var i = 0; i < InPr.length; i++) {  
                  alert(InPr[i]);  
              }  
          
          

          diese schleife gibt jeweils: 0, 85 - 10, 87.4 - 20, 90 - ... aus. Reicht es aus, wenn mann dies so schreiben würde?

            
             var InPr = new Array;  
             InPr.push(0.0, 85.0);  
             InPr.push(10.0, 87.4);  
             InPr.push(20.0, 90.0);  
             InPr.push(30.0, 91.);  
             InPr.push(40.0, 93.5);  
             InPr.push(50.0, 94.1);  
          
          

          Gruß

          1. Hi,

            Reicht es aus, wenn mann dies so schreiben würde?

            var InPr = new Array;
               InPr.push(0.0, 85.0);
               InPr.push(10.0, 87.4);
               InPr.push(20.0, 90.0);
               InPr.push(30.0, 91.);
               InPr.push(40.0, 93.5);
               InPr.push(50.0, 94.1);

              
            Nein, das würde die Werte alle nacheinander in InPr einfügen, so dass du nur ein „ein-dimensionales“ Array erhältst.  
              
            Wenn du Arrays in dein Array pushen willst – dann musst du diese Arrays selber erst mal erzeugen.  
              
            MfG ChrisB  
              
            
            -- 
            Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
            
            1. Hallo,

              vielen Dank. Aber wie?

              Gruß

        2. Hi,

          // Array erzeugen:

          var myArray = [];
          // Array mit Zahlen von 1 bis 5 erzeugen
          var myArray = [1,2,3,4,5];
          // Array an der Stelle 3 auslesen
          alert( array[3] ); // gibt 3 aus

            
          Nein, tut’s nicht.  
            
          Erstens heißt deine Variable nicht array, sondern myArray – und zweitens steht am Index 3 der Wert 4, nicht 3. Remember: zero-based index …  
            
          MfG ChrisB  
            
          
          -- 
          Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
          
          1. Meine Herren!

            Erstens heißt deine Variable nicht array, sondern myArray – und zweitens steht am Index 3 der Wert 4, nicht 3. Remember: zero-based index …

            Du hast natürlich recht. Da hab ich schneller geschrieben als gedacht.

            --
            “All right, then, I'll go to hell.” – Huck Finn
    2. Lieber 1UnitedPower,

      Eine ganz andere Methode, wäre die Methode forEach zu nutzen:

      InPr.forEach( function( wert, i, array ) {

      // i ist wieder eine Zählvariable, die die Postion im Array angibt
         // wert sind wieder die Einträge des äußeren Array, also z.B: [0.0, 85.0]
         // array ist das äußere Array selber.
         array[ i ] = 42; // Oder was immer dir gefällt.
      });

        
      diese Methode (von Array-Objekten) steht [erst ab IE9 zur Verfügung](http://kangax.github.io/compat-table/es5/#Array.prototype.forEach), Browser konnten das schon früher. Nur als Ergänzung.  
        
      Liebe Grüße,  
        
      Felix Riesterer.
      
      -- 
      "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)