Trekker: Arrays dynamisch auf gleiche Länge bringen

Ich möchte gerne die einzelnen Arrays des Arrays "reihe"

var reihe = new Array();
//
reihe[0] = new Array("1","2","3","4");
reihe[1] = new Array("5","6","7","8","9");
reihe[2] = new Array("10","11");
//

dynamisch immer auf die gleiche Anzahl an Elementen bringen!

Ich brauche demnach eine Funktion die ermittelt, daß "reihe[1]" mit 5 Elementen das längste Array ist, um dann z.B. mit

reihe[i].push("x")

dem Array "reihe[0]" ein Element (einmal "x") und dem Array "reihe[2]" drei Elemente (dreimal "x") hinzuzufügen.

Vielleicht hat jemand einen Tip ?

Mfg Trekker

  1. Ich möchte gerne die einzelnen Arrays des Arrays "reihe"
    dynamisch immer auf die gleiche Anzahl an Elementen bringen!

    Ich brauche demnach eine Funktion die ermittelt, daß "reihe[1]" mit 5 Elementen das längste Array ist, um dann z.B. mit
    reihe[i].push("x")
    dem Array "reihe[0]" ein Element (einmal "x") und dem Array "reihe[2]" drei Elemente (dreimal "x") hinzuzufügen.

    Vielleicht hat jemand einen Tip ?

    Trekker,
    Genau wie du sagst: Du gehst reihe der Reihe nach durch und bestimmst das Maximum von reihe[i].length.

    Dann gehst du nochmal durch und füllst alle reihe[i] bis zu dieser Größe auf.

    Wo ist dein Problem?
    Gunnar

    --
    "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
    (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
    1. Hy und guten Abend Gunnar,

      Wo ist dein Problem?

      innerhalb der unten stehenden Funktion!

      Eine dynamisch erzeugte Tabelle soll immer so viele Zellen in einer Reihe haben, wie das längste Array des Arrays "reihe" ...

      Die Arrays "reihe[0]" und "reihe[1]" entsprechen also jeweils den Zellen einer Reihe der Tabelle.

      Und eine Tabelle hat immer so viele Zellen in jeder Reihe, wie die längste Reihe Zellen hat ... Das kann man ja schon fast singen :-)

      Manuell hätte ich die Arrays so auf gleiche länge gebracht:

      reihe[0] = new Array("1","2","3","4"," ");

      Mfg Trekker

      ///////////////////////////////////////////////////////////////////

      <html>
      <head>
      <script type="text/javascript">
      <!--

      var reihe = new Array();
      //
      reihe[0] = new Array("1","2","3","4");
      reihe[1] = new Array("5","6","7","8","9");
      //

      function test()
      {

      tabelle = document.getElementById('tab');

      for (i = 0; i < reihe.length; i++)
      {

      reihen = tabelle.insertRow(i);

      for (n = 0; n < reihe[i].length; n++)
      {
      zelle = reihen.insertCell(n);
      zelle.innerHTML = reihe[i][n];
      }

      }

      }

      //-->
      </script>
      </head>
      <body onload="test()">
      <table id="tab" border="1"></table>
      </body>
      </html>

      1. Eine dynamisch erzeugte Tabelle soll immer so viele Zellen in einer Reihe haben, wie das längste Array des Arrays "reihe" ...

        Trekker,
        Warum eigentlich? AFAIK dürfen in verschiedenen Zeilen einer Tabelle unterschiedlich viele Zellen sein. Es ist nicht nötig, hinten aufzufüllen.

        Live long and prosper,
        Gunnar

        --
        "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
        (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
        1. Es ist nicht nötig, hinten aufzufüllen.

          Aber wenn's denn sein soll:

          // ermittle längste Reihe

          var maxLength = 0;
          for (i = 0; i < reihe.length; i++)
            maxLength = max (maxLength, reihe[i].length);

          // fülle auf

          for (i = 0; i < reihe.length; i++)
            while (reihe[i].length < maxLength)
          //  reihe[i].push("");

          //  oder besser

          reihe[i][reihe[i].length] = "";

          //  da push() nicht in allen Browsern funktioniert
          //  http://de.selfhtml.org/javascript/objekte/array.htm#push

          Gunnar

          --
          "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
          (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
          1. Es ist nicht nötig, hinten aufzufüllen.

            Gunnar,
            herzlichen Dank für Deinen selbstlosen Nachteinsatz und die Lösung (werds gleich probieren, weil war den ganzen Tag draussen :-) )

            But: what meens AFAIK ???? Warum müssen Reihen einer Tabelle nicht gleich viele Zellen haben --- das ist doch unlogisch, wenn ich das mal so sagen darf, sonst wird doch auch nix so lax gehandhabt ....

            Mfg Trekker

            1. But: what meens AFAIK ????

              Trekker,
              Das steht in </faq/#Q-22>, AFAIK. ;-)

              Warum müssen Reihen einer Tabelle nicht gleich viele Zellen haben

              Weil HTML das nicht vorschreibt. Wie willst du das auch in der DTD ausdrücken? Da kann nur stehen dass tr beliebig viele (mindestens eins) Elemente th oder td beinhalten kann:
              <!ELEMENT TR       - O (TH|TD)+        -- table row -->

              Das zweite Element tr in einer Tabelle weiß nichts von dem ersten tr, schon gar nicht, wie viele th und td dort enthalten sind. Also kann es einen Vergleich auf "gleich viele" gar nicht geben.

              LLAP,
              Gunnar

              --
              "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
              (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
              1. Gunnar,

                AFAIK !

                LOL + ROTFL ... SCNR !

                Das zweite Element tr in einer Tabelle weiß nichts von dem ersten tr, schon gar nicht, wie viele th und td dort enthalten sind. Also kann es einen Vergleich auf "gleich viele" gar nicht geben.

                BTW,

                das klingt verdammt logisch!!!

                ///////////////////////////////////////

                PS. Mit "Math.max" hats geklappt - das war der entscheidende Tip. Habs dann noch ein bischen eingedampft ...

                <html>
                <head>

                <script type="text/javascript">
                <!--

                var reihe = new Array();
                //
                reihe[0] = new Array("1","2","3","4","5","6");
                reihe[1] = new Array("1","2","3");
                //

                var maximal = 0;

                for (i = 0; i < reihe.length; i++)
                {
                maximal = Math.max(maximal,reihe[i].length);
                }

                function test()
                {

                tabelle = document.getElementById('tab');

                for (i = 0; i < reihe.length; i++)
                {
                reihen = tabelle.insertRow(i);

                for (n = 0; n < maximal; n++)
                {

                zellen = reihen.insertCell(n);

                if(n < reihe[i].length)
                zellen.innerHTML = reihe[i][n];
                else
                zellen.innerHTML = "leer";

                // Abweichende Formatierung der ersten Zeile - z.B. "bold" für Kolumnenüberschriften

                if (i < 1)
                zellen.className = "titel";
                else
                zellen.className = "zelle";

                }

                }

                }

                //-->
                </script>
                </head>
                <body bgcolor="#ffffff" onload="test()">
                <center>
                <table id="tab" border="1"></table>
                </center>
                </body>
                </html>

                ///////////////////////////////////////

                Gruss aus Hamburg Mfg Trekker :-)