Felix Riesterer: Array – Sprachelement und Standardobjekt

Beitrag lesen

Lieber Rolf,

  1. Assoziative Arrays Den Abschnitt finde ich schwer verständlich. Ich will nicht einfach nach Gutdünken dran rumbasteln - daher hier meine Anregungen:
  • Es müsste klargestellt werden, dass das, was hier als assoziatives Array gezeigt wird, eben kein Array ist, sondern ein allgemeines Objekt.
  • Normale Objekte als Beispiel für assoziative Arrays zu bringen, halte ich für nicht so gut. Damit förderst Du unnötig die Kritik, die im Objekte-Artikel über AAs geäußert wird. AAs sind sinnvoll, wenn die Schlüssel erst zur Laufzeit bekannt werden, also z.B. wenn man ein Dictionary oder eine Lookup-Tabelle braucht.

hmm. Jetzt, da ich mich ein bisschen in die Array-Seiten einlese, stelle ich mir die Frage, was ein "assoziatives Array" eigentlich sein soll. In PHP ist ein solches das, was man in anderen Sprachen als Dictionary oder Hashtable bezeichnet, nämlich eine Datenstruktur, die alphanumerische Schlüssel für Daten verwendet:

<?php
$employees = array(
    'mueller' => array(
        'family-name' => 'Müller',
        'first-name' => 'Max',
        'age' => 24,
        'residence' => 'München'
    ),
    'doll' => array(
        'family-name' => 'Doll',
        'first-name' => 'Dieter',
        'age' => 25,
        'residence' => 'Berlin'
    )
);

foreach ($employees as $key => $value) {
    echo "employee '$key': ";
    print_r($value);
}

Das Wesentliche in PHPs assoziativen Arrays sind die alphanumerischen Indices. Bei einem herkömmlichen Array (lies: Feldvariable) sind die Indices streng numerisch, so auch in JavaScript. Will man die Idee von Dictionary/Hashtable in JavaScript umsetzen, so muss man ein generisches Objekt verwenden (siehe die Array-Elemente selbst), dem man die jeweiligen Schlüssel als Eigenschaftsnamen gibt. Das obige Beispiel ließe sich in JavaScript so lösen:

const employees = {
    "mueller": {
        "family-name": "Müller",
        "first-name": "Max",
        "age": 24,
        "residence": "München"
    },
    "doll": {
        "family-name": "Doll",
        "first-name": "Dieter",
        "age": 25,
        "residence": "Berlin"
    }
};

for (var key in employees) {
    console.log("employee '"+key+"':");
    console.dir(employees[key]);
}

Die prototypischen Eingenschaften werden mit for-in nicht erfasst (es kommt die Eigenschaft length nicht vor), sodass das Iterieren über das Objekt fast wie bei einem PHP-Array möglich ist, abzüglich der bei JavaScript-Arrays sehr komfortablen forEach-Methode natürlich.

Wobei wir nicht verheimlichen sollten, dass wir hier über mehrdimensionale Arrays/Datenstrukturen reden. Die einfache Variante wäre nämlich diese:

<?php

$rgb = array(
    'red' => '#FF0000',
    'green' => '#00FF00',
    'blue' => '#0000FF'
);

foreach ($rgb as $key => $value) {
    echo "'$key' has rgb value '$value'".PHP_EOL;
}

Das JavaScript-Pendant dazu:

const rgb = {
    "red": "#FF0000",
    "green": "#00FF00",
    "blue": "#0000FF"
};

for (var key in rgb) {
    console.log(key+" has rgb value '"+rgb[key]+"'");
}

Was sagt ihr beide dazu?

Liebe Grüße,

Felix Riesterer.