Romero: Dynamische Array-Namen

Hallöchen an Euch,

wie kann ich dynamische Array-Namen erstellen und diese dann verwenden?

Beispiel:

var Array_A = new Array("a", "b", "c");
var Array_B = new Array("d", "e", "f");

alert(Array_?)
//=> Hier sollte entweder a, b, c oder d, e, f erscheinen

Dazu sei erwähnt, dass die Array-Namen feststehen. Also ich schreibe in einen separate JS-Datei, welche dann hochgeladen wird, folgendes:

file.write( "var Array_" + dyn_Variablenzusatz + " = new Array("hier steht der Inhalt");

dyn_Variablenzusatz könnte also A oder B (siehe Bsp.) sein.

LG Romero

  1. Tach!

    wie kann ich dynamische Array-Namen erstellen und diese dann verwenden?

    Ich habe noch nicht verstanden, was du genau erreichen willst, aber generell gesagt, klingt das nach einem "so macht man es eigentlich nicht".

    Generell kann man auf Objekteigenschaften mit x.foo oder x['foo'] zugreifen. Und innerhalb einer Funktion zeigt this auf den lokalen Scope. Der globale Scope ist mit windows zu erreichen (zumindest in Browsern).

    dedlfix.

    1. Hy,

      Ich habe noch nicht verstanden, was du genau erreichen willst, aber generell gesagt, klingt das nach einem "so macht man es eigentlich nicht".

      Generell kann man auf Objekteigenschaften mit x.foo oder x['foo'] zugreifen. Und innerhalb einer Funktion zeigt this auf den lokalen Scope. Der globale Scope ist mit windows zu erreichen (zumindest in Browsern).

      Ich versuche gerade, dynamisch eine LinkedSelection anzusteuern.

      var Auswahl = new LinkedSelection( [ 'Option_A', 'Option_A' ], ErgebnisZeigen, Array_? );
      

      Diese Variable Array_? sind eine oder mehrere verschiedene Arrays, welche ich ebenfalls dynamisch erstelle. Um so jedesmal die richtige Variable einzuladen, wollte ich versuchen, an dieser Stelle eine dynamische Variable einsetzen, um:

      • keine unnötigen if-Abfragen zu verwenden, sondern eine Funktion für alle
      • unterschiedliche Array-Namen zu verwenden, damit ich vorrangegangene Arrays nicht überschreibe

      Meine Frage war daher, ob ich solch ein dynamisches Array überhaupt erstellen kann, ohne Objekt-Eigenschaften zu setzen.

      LG Romero

      1. Tach!

        Ich versuche gerade, dynamisch eine LinkedSelection anzusteuern.

        Versuch mal das Wort "dynamisch" zu vermeiden und konkret zu sagen, was du tust oder was passieren soll.

        Meine Frage war daher, ob ich solch ein dynamisches Array überhaupt erstellen kann, ohne Objekt-Eigenschaften zu setzen.

        Alles sind mehr oder weniger nur Objekteigenschaften in Javascript. Globale Variablen zum Beispiel sind Objekteigenschaften vom window-Objekt. Warum willst du kein Objekt als Container nehmen? Das ist allemal besser, als mit einzelnen Variablen rumzuhantieren.

        dedlfix.

  2. @@Romero

    wie kann ich dynamische Array-Namen erstellen und diese dann verwenden?

    Die allgemeine Antwort auf die Frage nach dynamischen Variablennamen ist: nein, sondern Array.

    Also nicht

    var Array_A = new Array("a", "b", "c");
    var Array_B = new Array("d", "e", "f");
    

    sondern

    var myArray = [];
    myArray['A'] = new Array("a", "b", "c");
    myArray['B'] = new Array("d", "e", "f");
    

    Dann hast du bequemen Zugriff darauf mit myArray[dyn_Variablenzusatz]

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. var myArray = [];
      myArray['A'] = new Array("a", "b", "c");
      myArray['B'] = new Array("d", "e", "f");
      

      Wohl eher:

      var myObj = {};
      myObj['A'] = ["a", "b", "c"];
      myObj['B'] = ["d", "e", "f"];
      

      Bzw. direkt:

      var myObj = {
          'A' : ["a", "b", "c"],
          'B' : ["d", "e", "f"]
      };
      
      1. var myArray = [];
        myArray['A'] = new Array("a", "b", "c");
        myArray['B'] = new Array("d", "e", "f");
        

        Wohl eher:

        var myObj = {};
        myObj['A'] = ["a", "b", "c"];
        myObj['B'] = ["d", "e", "f"];
        

        Wohl eher:

        var myArray = [
            ["a", "b", "c"],
            ["d", "e", "f"]
        ];
        

        Indexieren mit Buchstaben ist absurd. Insbesondere dann, wenn man von einer impliziten Indexierung Gebrauch machen kann. Außerdem bietet das Array-Interface schon viele geeignete Methoden an, um auf gleichartigen Datensätzen zu operieren, die man bei planen Objekten zunächst nicht hat.

        1. Indexieren mit Buchstaben ist absurd.

          Ohne das konkrete Szenario zu kennen, ist das noch nicht gesagt. Ich kann mir durchaus Fälle vorstellen, in denen das angebracht sein könnte. Irgendwas in der Richtung eines Telefonbuchs oder so...

          Insbesondere dann, wenn man von einer impliziten Indexierung Gebrauch machen kann. Außerdem bietet das Array-Interface schon viele geeignete Methoden an, um auf gleichartigen Datensätzen zu operieren, die man bei planen Objekten zunächst nicht hat.

          ACK.

    2. Hy Gunnar

      var myArray = [];
      myArray['A'] = new Array("a", "b", "c");
      myArray['B'] = new Array("d", "e", "f");
      

      Ich hab diese Hilfe genommen und es klappt wunderbar.

      Vielen Dank

      LG Romero

      1. Hallo

        var myArray = [];
        myArray['A'] = new Array("a", "b", "c");
        myArray['B'] = new Array("d", "e", "f");
        

        Ich hab diese Hilfe genommen und es klappt wunderbar.

        Ich habe zwar nicht verstanden was du eigentlich vorhast, aber wie Mitleser bereits angemerkt hat, ist Gunnars Vorschlag alles andere als ideal, denn erstens sollte die Literalschreibweise verwendet werden und zweitens kein Array sondern ein Object, wenn es sich bei den Eigenschaftsnamen – wie in deinem Fall – nicht um positive Ganzzahlen handelt.

        Zwar ist ein Array in JavaScript auch ein Object, weshalb beliebig Eigenschaften zugewiesen oder definiert werden können, aber weder kannst du auf diese Eigenschaften die von Array.prototype geerbten Methoden anwenden, noch werden diese Eigenschaften bei der Berechnung des Wertes der Länge (length) des Arrays berücksichtigt.

        Das bedeutet, du würdest hier kein assoziatives Array bekommen, sondern letztlich dein Array nur wie ein Object verwenden, weshalb ein solches für die Hinterlegung deiner Daten die richtige Wahl wäre:

        var object = {
          'A' : ['a', 'b', 'c'],
          'B' : ['d', 'e', 'f']
        };
        

        Gruß,

        Orlok

  3. Liest sich irgendwie so, als wolltest Du serverseitig ein JSON erstellen:

    {
        "A" : ["a", "b", "c"],
        "B" : ["d", "e", "f"]
    };
    

    und dann clientseitig via JavaScript auswerten.

    1. Hy dedlfix

      Versuch mal das Wort "dynamisch" zu vermeiden und konkret zu sagen, was du tust oder was passieren soll.

      Alles sind mehr oder weniger nur Objekteigenschaften in Javascript. Globale Variablen zum Beispiel sind Objekteigenschaften vom window-Objekt. Warum willst du kein Objekt als Container nehmen? Das ist allemal besser, als mit einzelnen Variablen rumzuhantieren.

      Also ich versuche, eine in Abhängkeit gesetzte Auswahlliste, so einzubinden, dass ich sie für mehrere Anwendungen bzw. mehrere Fälle nutzen kann. Dazu wollte ich 1mal diese LinkedSelection definieren, mit den dazugehörigen Variablen, wo sich, je nach Fall, dieses letztgenanntes Array ändert, da ich ja verschiedene Arrays unterschiedlich befüllt habe.

      Aber ich habe nun einen Weg gefunden, je nach Fall, diese LinkedSelection explizit auf zu definieren. Und da war der Tipp von Gunnar schon sehr sehr hilfreich, bzw. diese von Mitleser.

      Daher habe ich nun meine separat-geschriebene JS.Datei, welche ich dann zu dieser Selection einlese, wie folgt geschrieben:

      file.write( "var myArray = {};" );
      file.write( "myArray['" + dynZusatzvariable + "'] = Inhalt" );
      

      und greife darauf wie folgt zu:

      var Auswahl = new LinkedSelection( [ 'Option_A', 'Option_A' ], ErgebnisZeigen, Array[dynZusatzvariable] );
      

      Danke nochmal an alle, die mir dabei geholfen haben.

      LG Romero

  4. Du mischst deine Daten mit deiner Programmlogik, lass mich das erklären: du generierst den JavaScript-Code für die Erzeugung der Arrays und implantierst diesen Code dann in dein ursprüngliches JavaScript-Programm. Damit wird es enorm schwer dein Programm zu verstehen und mit technischen Mitteln präzise Aussagen darüber zu treffen. Stattdessen solltest du die Daten in einem geeigneten Austauschformat (json) außerhalb des JavaScript-Programms speichern. Dein JavaScript-Programm solltest du so erweitern, dass es selbstständig die benötigten Daten laden kann. Dieser Ladevorgang geschieht in der Regel über AJAX. Die Trennnung von Datenhaltung und Programmlogik ist eins der wichtigsten Prinzipien der Programmierung, je früher du dich damit vertraut machst, desto besser.