Mathias: Mehrdimensionale Arrays

Hallo

Ich möchte ein mehrdimensionales assoziatives Array erstellen:

  
var data = new Array();  
  
user["tom"]["familienstand"] = "Ledig";  
user["tom"]["wohnort"] = "München";  
user["peter"]["familienstand"] = "Verheirate";  
user["peter"]["wohnort"] = "Frankfurt";  
user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";  

Problem ist, dass ich dann für jede Spalte die ich benutzen möchte, ein neues Objekt mit 'new Object()' erstellen muss, was einfach nicht so schön und zweitens relativ mühsam ist weil das Javascript mit PHP generiert wird.

  
user["tom"] = new Object();  
user["tom"]["familienstand"] = "Ledig";  
user["tom"]["wohnort"] = "München";  
user["peter"] = new Object();  
user["peter"]["familienstand"] = "Verheirate";  
user["peter"]["wohnort"] = "Frankfurt";  
user["peter"]["wohnort"] = "Frankfurt";  
user["peter"]["wohnort"] = new Object();  
user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";  

Gibt's da eine bessere Lösung?

Gruss Mathias

  1. Hallo

    Ich möchte ein mehrdimensionales assoziatives Array erstellen:

    var data = new Array();

    user["tom"]["familienstand"] = "Ledig";
    user["tom"]["wohnort"] = "München";
    user["peter"]["familienstand"] = "Verheirate";
    user["peter"]["wohnort"] = "Frankfurt";
    user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";

    
    >   
    > Problem ist, dass ich dann für jede Spalte die ich benutzen möchte, ein neues Objekt mit '`new Object()`{:.language-javascript}' erstellen muss, was einfach nicht so schön und zweitens relativ mühsam ist weil das Javascript mit PHP generiert wird.  
    >   
    > ~~~javascript
      
    
    > user["tom"] = new Object();  
    > user["tom"]["familienstand"] = "Ledig";  
    > user["tom"]["wohnort"] = "München";  
    > user["peter"] = new Object();  
    > user["peter"]["familienstand"] = "Verheirate";  
    > user["peter"]["wohnort"] = "Frankfurt";  
    > user["peter"]["wohnort"] = "Frankfurt";  
    > user["peter"]["wohnort"] = new Object();  
    > user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";  
    > 
    
    

    Gibt's da eine bessere Lösung?

    Gruss Mathias

    bei "Verheirate" hast du das "t" vergessen ;-)

  2. Hallo,

    Ich möchte ein mehrdimensionales assoziatives Array erstellen:

    ... die in JavaScript, wie du ja auch festgestellt hast, schlichtweg Object-Objekte mit Object-Kindobjekten sind und mit Arrays in JavaScript wenig gemein haben.

    Problem ist, dass ich dann für jede Spalte die ich benutzen möchte, ein neues Objekt mit 'new Object()' erstellen muss, was einfach nicht so schön

    Gibt's da eine bessere Lösung?

    Nein.
    Das heißt, du kannst »new Object()« durch die äquivalente Kurzschreibweise »{}« abkürzen, aber das ändert nicht daran, dass du jedes Unterobjekt von Hand erstellen musst.

    und zweitens relativ mühsam ist weil das Javascript mit PHP generiert wird.

    Na, wenn du den Code sowieso automatisierst ausgibst, sollte es wohl alles andere als mühsam sein.

    Mathias

  3. gruss Mathias

    Ich möchte ein mehrdimensionales assoziatives Array erstellen:

    http://forum.de.selfhtml.org/archiv/2004/7/84257/#m493695
      http://forum.de.selfhtml.org/archiv/2004/7/85970/#m507500
      http://forum.de.selfhtml.org/archiv/2004/8/86318/#m510547

    var data = new Array();

    user["tom"]["familienstand"] = "Ledig";
    user["tom"]["wohnort"] = "München";
    user["peter"]["familienstand"] = "Verheirate";
    user["peter"]["wohnort"] = "Frankfurt";
    user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";

      
      du benötigst eine reine objekt-struktur:  
      
      ~~~javascript
    var data = {  
        user: { /* man kann auch "verbotene" bezeichner erzeugen, wenn man deren namen in hochkommata fasst; */  
          "Thomas Müller": {  
            familyStatus: "ledig",  
            location: "München"  
          }, /* diese lassen sich dann aber nicht mehr ueber die "."-syntax referenzieren, sondern nur noch ueber ["propoertyName"]; */  
          "Peter Schneider": {  
            familyStatus: "verheiratet",  
            location: "Frankfurt"  
          }  
        }  
      };/*  
      var data = {  
        user: {  
          "Thomas Müller": {familyStatus: "ledig", location: "München"},  
          "Peter Schneider": {familyStatus: "verheiratet", location: "Frankfurt"}  
      }};  
    */
    

    die fuer den von Dir vorgegebenen zweiten fall

    user["tom"] = new Object();

    user["tom"]["familienstand"] = "Ledig";
    user["tom"]["wohnort"] = "München";
    user["peter"] = new Object();
    user["peter"]["familienstand"] = "Verheirate";/*
    user["peter"]["wohnort"] = "Frankfurt";    auskommentiert, weil Du das property
    user["peter"]["wohnort"] = "Frankfurt";    "wohnort" sowiso gleich ueberschreibst */
    user["peter"]["wohnort"] = new Object();
    user["peter"]["wohnort"]["strasse"] = "Bahnhofstrasse";

      
      eines aufgeschluesselten wohnortes so aussehen koennte:  
      
      ~~~javascript
    data = {  
        user: {  
          "Thomas Müller": {  
            familyStatus: "ledig",  
            residence: {  
              locationName: "München",  
              streetName: "Bahnstr.",  
              streetNumber: "1",  
              zipCode: "81827"  
            }  
          },  
          "Peter Schneider": {  
            familyStatus: "verheiratet",  
            residence: {  
              locationName: "Frankfurt",  
              streetName: "Bahnhofstr.",  
              streetNumber: "1",  
              zipCode: "65929"  
            }  
          }  
        }  
      };/*  
      data = {  
        user: {  
          "Thomas Müller": {familyStatus: "ledig",residence: {locationName: "München",streetName: "Bahnstr.",streetNumber: "1",zipCode: "81827"}},  
          "Peter Schneider": {familyStatus: "verheiratet",residence: {locationName: "Frankfurt", streetName: "Bahnhofstr.", streetNumber: "1", zipCode: "65929"}}  
      }};  
    */
    

    forumslinks zu objektliteralen:

    - objekt-literale als "jsDatenbanken" vom 15. 12. 2003,
      - literalschreibweise komplexer objekte: JSON - http://json.org/ vom 17. 08. 2004,
      - Doppelpunkt notation vom 23. 10. 2004,

    link zu "JSON - JavaScript Object Notation" von Mr. Douglas Crockford.

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

    --
    "Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive." - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]