Andreas Mengel: Arrayzuweisung aus Array

hallo
habe ein problem
gleich zur sache:

position = new Array(4,7,2,3);
daten[position] = "irgend ein text";

das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:

daten[4][7][2][3] = "irgend ein text";

ist sowas möglich?
also ich habe einen array "position", der ganze zahlen enthält die ich in der reihenfolge, wie sie dort abgespeichert sind für die zuweisung zu einem einen mehrdimensionalen array (anzahl der dimensionen steht nicht fest!!) verwenden möchte.
danke für eure hilfe
gruss
andreas

  1. Hi,

    das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:

    daten[4][7][2][3] = "irgend ein text";

    sowas?
    position =  new Array(4,7,2,3);
    text     =  new Array("text", mehr Text", "auch Text", "was auch immer");
    data     =  new Array();

    for (i in position) {
      data[position[i]] =  text[i]
    }

    oder gleich:
    data = new Array();
    data[4] =  "text";
    data[7] =  "text";
    ...

    Gruesse  Joachim

    1. hallo
      nö - ich wär froh, wenns so einfach wäre
      es ist ein mehrdimensionaler array!
      zudem steht die anzahl der -> dimensionen <- nicht fest.
      die länge der einzelnen ebenen steht aber auch wiederum nicht fest...
      gruss
      andreas

  2. Wieso nicht einfach so:

    daten[position[0]][position[1]][position[2]][position[3]] = 'ein Text';

    Bei verschiedenen Dimensionen würde ich if-Abfragen setzen.

    if ( position.length == 1 )
    ...
    else if (...)

    Das in einen 3-Zeilen-ForSchleifen-Code zu bekommen halte  ich für unmöglich...

    1. hallo
      danke soweit
      also eine zeit lang könnte das funktionieren...
      ich kanns ja mal bis 10 oder so machen
      nur sollte es weiter wachsen gibts ein problem...
      ich würde auch einen "100-Zeilen-ForSchleifen-Code" schreiben, solange es nur geht ;)
      aber so langsam vermute ich es geht gar nicht :(
      gruss
      andreas

      1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>

        <head>
            <title>Array.getDataByArray()</title>
            <script type="text/javascript">
            <!--
                /*

        hallo
                 habe ein problem
                 gleich zur sache:

        position = new Array(4,7,2,3);
                 daten[position] = "irgend ein text";

        das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:

        daten[4][7][2][3] = "irgend ein text";

        ist sowas möglich?
                 also ich habe einen array "position", der ganze zahlen enthält die ich in der
                 reihenfolge, wie sie dort abgespeichert sind für die zuweisung zu einem einen
                 mehrdimensionalen array (anzahl der dimensionen steht nicht fest!!) verwenden möchte.

        danke für eure hilfe
                 gruss
                 andreas

        */

        //    ...
                //    ...

        /*

        hallo
                 danke soweit
                 also eine zeit lang könnte das funktionieren...
                 ich kanns ja mal bis 10 oder so machen
                 nur sollte es weiter wachsen gibts ein problem...
                 ich würde auch einen "100-Zeilen-ForSchleifen-Code" schreiben, solange es nur geht ;)
                 aber so langsam vermute ich es geht gar nicht :(
                 gruss
                 andreas

        */

        //  gruss Andreas,
            //
            //  hier der diskutierte ansatz ueber eine schleife -
            //  wofuer auch immer Du so etwas brauchst:
            //
                var dataStructure = [
                    null,
                    null,
                    null,
                    null,
                    [
                        null,
                        null,
                        null,
                        [
                            null,
                            ["ein anderer text"],
                            null
                        ],
                        null,
                        null,
                        null,
                        [
                            null,
                            null,
                            [
                                null,
                                null,
                                null,
                                ["irgendein text"],
                                null
                            ],
                            null,
                            null,
                            null
                        ],
                        null
                    ],
                    null,
                    null
                ];

        Array.prototype.getDataByArray = function(arrayObject) {
                    var data;
                    if (arrayObject.constructor == Array) {
                        data = this;
                        for (var i=0;i<arrayObject.length;i++) {
                            data = data[arrayObject[i]];
                        }
                    }
                    return data;
                }

        alert(dataStructure.getDataByArray([4,7,2,3]));
                alert(dataStructure.getDataByArray([4,3,1]));
                alert(dataStructure.getDataByArray({wiebitte:"ja aber"}));

        //  getestet unter windows mit nn4.x, mozilla 1.1, msie 6.0, opera 6.0 beta sowie opera 7.0 beta01;
            //
            //  viel spass und by(t)e by(t)e - peterS. - pseliger@gmx.net
            //
            //-->
            </script>
        </head>

        <body>
            <p>
                <br />
            </p>
        </body>

        </html>

        --
        sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)

        1. hallo again Andreas,

          die daten-struktur hat nach korrektur wie folgt auszusehen:
          (die strings waren faelschlicherweise eintraege in einem array)

          var dataStructure = [
                      null,
                      null,
                      null,
                      null,
                      [
                          null,
                          null,
                          null,
                          [
                              null,
                              "ein anderer text",
                              null
                          ],
                          null,
                          null,
                          null,
                          [
                              null,
                              null,
                              [
                                  null,
                                  null,
                                  null,
                                  "irgendein text",
                                  null
                              ],
                              null,
                              null,
                              null
                          ],
                          null
                      ],
                      null,
                      null
                  ];

          by(t)e by(t)e - peterS. - pseliger@gmx.net

          --
          sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)

          1. hallo
            vielen dank für den riesen code
            habe mir jetzt nicht die mühe gemacht ihn zu durchblicken, sorry ;)
            aber irgendwie glaube ich so wie ich das da lese steht die anzahl der elemente ja auch fest...
            naja habe schon eine lösung gefunden, die viel eifacher ist :D

            position = new Array(4,7,2,3);
            eval("daten[" + position.join("][") + "] = text;");

            gruss
            andreas mengel

            1. gruss Andreas ,

              hallo
              vielen dank für den riesen code

              bitte;

              habe mir jetzt nicht die mühe gemacht ihn zu durchblicken, sorry ;)

              schade - denn dann haettest Du gesehen, dass
                 die entscheidende methode fuer Dein Array gar
                 nicht so gross ist ...

              Array.prototype.getDataByArray = function(arrayObject) {
                     var data;
                     if (arrayObject.constructor == Array) {
                         data = this;
                         for (var i=0;i<arrayObject.length;i++) {
                             data = data[arrayObject[i]];
                         }
                     }
                     return data;
                 }

              ... und auch daruf achtet, dass nur Arrays als parameter
                 dieser methode akzeptiert werden;

              aber irgendwie glaube ich so wie ich das da lese steht die anzahl der elemente ja auch fest...

              noe - wie kommst Du darauf ?

              naja habe schon eine lösung gefunden, die viel eifacher ist :D

              position = new Array(4,7,2,3);
              eval("daten[" + position.join("][") + "] = text;");

              eval-konstrukte koennen manchmal schon elegant aussehen,
                 ABER "eval is evil" !

              (http://selfsuche.teamone.de/cgi-bin/hack.cgi?suchausdruck=%2Beval+%2Bevil&lang=on&feld=text&index_5=on&index_6=on&hits=500)

              by(t)e by(t)e - peterS. - pseliger@gmx.net

              --
              sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)