2BitMarv: verschachtelte Schleifen, oder wie geht das?

Hallo liebe Gemeinde,

Ich bin in der unglücklichen Situation etwas verwirrt zu sein bei dem Versuch folgende Logik zu verstehen:

Ich möchte gerne ein einfaches Array auf eine bestimmte Weise mit Werten befüllen. Dazu verwende ich ein Konstrukt aus zwei verschachtelten FOR Schleifen in einer FUNCTION, die wie folgt aussieht:

function makeCoordsY(h,v){
  var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
  var res_2 = getCoordY('distY','IMG');//hier ebenfalls
  var diff = res_2 - res_1;//Differenz berechnen
  var k = 0;//Eine Hilfsvaiable
  var result = new Array();
    for(i=0;i<v;i++){
      for(j=0;j<h;j++){
        result[i] = res_1+(diff*k);
      }
      k++;
    }
  return result;
}

So, prinzipiell funktioniert das auch. Die äußere FOR Schleife bestimmt wie viele Werte im Array stehen. Die innere Schleife ergibt den jeweiligen Wert. Nach meinem Verständnis sollte die innere Schleife doch eigentlich so oft durchlaufen bis die Bedingung j<h nicht mehr zutrifft um dann k++ zu erhöhen und die äußere Schleife den nächsten Durchlauf beginnt.

Also geben wir als h,v doch mal 7,14 an. res_1 ist jetzt mal = 27 und res_2 = 44. Dann sollte mein Array doch iegentlich so aussehen (wie ich es ja auch haben will):
[27,27,27,27,27,27,27,27,48,48,48,48,48,48,48,48,61,61,61,61,....]

Ausgegeben wird aber:
[27,48,61,78,95,112,129....]

Wo liegt mein Denkfehler? bzw. Wie arbeitet JS hier?
Grüße, 2BitMarv

  1. Hallo,

    function makeCoordsY(h,v){
      var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
      var res_2 = getCoordY('distY','IMG');//hier ebenfalls
      var diff = res_2 - res_1;//Differenz berechnen
      var k = 0;//Eine Hilfsvaiable
      var result = new Array();
        for(i=0;i<v;i++){
          for(j=0;j<h;j++){
            result[i] = res_1+(diff*k);

    hier liegt dass Problem, da Du i einsetzt (result[i]) und dies im inneren Schleifendurchlauf gleichbleibend ist, überschreibst Du einfach die Werte wieder

    }
          k++;

    wozu brauchst Du k, in diesem Falle könntest Du i anstatt dessen benutzen

    }
      return result;
    }

    naja, habe nur eine vielleicht nicht ganz ergonomische Lösung parat ;)
    result[i+j], so vermeidest Du auf jeden Fall die Überschreibungen
    ich denke es gibt noch bessere Lösungsansätze, aber die wollen mir gerade nicht einfallen

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
    1. Hallo nochmals,

      naja, habe nur eine vielleicht nicht ganz ergonomische Lösung parat ;)
      result[i+j], so vermeidest Du auf jeden Fall die Überschreibungen

      das ist dann wohl doch eine falsche Aussage!
      sorry

      benutze, dann halt k als resultvariable und zähle es bei jedem Durchlauf hoch, also in der zweiten for-schleife, so müsste es gehen

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      ->Alles ist gut wenn es aus Schokolade ist
      1. Ja Hallo,

        AUBACKE! Das ich das nicht gesehen habe *Klatsch-an-die-Stirn*. Einleuchtend das i andauernd überschrieben wurde. Jetzt sieht das ganze so aus und tut auch was ich will :)

        function makeCoordsY(h,v){
          var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
          var res_2 = getCoordY('distY','IMG');//hier ebenfalls
          var diff = res_2 - res_1;//Differenz berechnen
          var k = 0;//Eine Hilfsvaiable
          var l = 0;//noch eine
          var result = new Array();
            for(i=0;i<v;i++){
              for(j=0;j<h;j++){
                result[l] = res_1+(diff*k);
                l++;
              }
              k++;
            }
          return result;
        }

        Einen herzlichen Dank an die Romy :)