Javascript: mehrdimensionales Objekt

8

Ich möchte ein Objekt erstellen, beginnend mit etwas wie:

%Vor%

Dann möchte ich Elemente mit dieser Funktion hinzufügen:

%Vor%

Dies ist also ein zufälliges Beispiel für die Objektstruktur, die ich erreichen möchte:

%Vor%

Nun, mein Problem. Ich kann map[objectB.type][integerA] = objectB; nicht ausführen, da map[objectB.type] nicht definiert ist. Ich könnte das lösen, indem ich überprüfe ob map[objectB.type] existiert durch eine if-Anweisung und create map[objectB.type] = {}; wenn nötig.

Sonst könnte ich alle Objekttypen vorladen. Aber ich würde es vorziehen, dies nicht tun zu müssen.

Meine Frage: Gibt es eine Möglichkeit, das Objekt "on the fly" zu erstellen, ohne jedes Mal prüfen zu müssen, ob der Typ bereits existiert, wenn ich die Funktion add aufrufen oder alle Typen vorladen möchte?

Es ist wichtig, dass meine Add-Funktion so schnell wie möglich ist und dass das Map-Objekt korrekt ist, weil ich in kurzer Zeit viel lesen und schreiben muss (es ist eine Animation / Spiel-Anwendung).

>     
user8363 10.07.2011, 20:13
quelle

3 Antworten

9

Nein, es gibt keine andere Möglichkeit, Objekte im laufenden Betrieb zu erstellen. Nur jedes Mal auf Existenz prüfen:

%Vor%

Wenn Sie die Leistung verbessern möchten, sollten Sie einige Caching-Techniken in Betracht ziehen.

    
bjornd 10.07.2011, 20:20
quelle
3

Wenn Sie die Map nur für Lookups verwenden und nicht über die Dimensionen iterieren müssen, können Sie Ihre Dimensionen in einem einzigen Schlüssel zusammenführen. Zum Beispiel:

%Vor%     
casablanca 10.07.2011 20:20
quelle
3

Sie können die boolesche ODER-Verknüpfung verwenden (die mindestens eine explizite if vermeidet). Es ist vielleicht nicht so leserlich:

%Vor%

Dies funktioniert, weil eine Zuweisung tatsächlich den zugewiesenen Wert zurückgibt und ein OR-Ausdruck den ersten Wert zurückgibt, der als true ausgewertet wird.

Ich glaube nicht, dass die Verwendung von if irgendeinen Einfluss auf die Performance hat (tatsächlich ist der Weg in meiner Antwort vielleicht sogar "langsamer").

    
Felix Kling 10.07.2011 20:16
quelle