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).
>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% Sie können die boolesche ODER-Verknüpfung verwenden (die mindestens eine explizite if
vermeidet). Es ist vielleicht nicht so leserlich:
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").
Tags und Links javascript object multidimensional-array