Hallo,
ich bin gerade am überlegen wie ich eine Funktion schreiben könnte, die es mir erlaubt sub-Objekte zu erstellen, wenn diese nicht existieren.
Folgendes Beispiel gibt natürlich eine Fehlermeldung. Aber ich hätte gerne, dass die sub-Objekte a, b, c, d, e automatisch generiert werden und einen Wert zugewiesen bekommen.
var obj = {};
obj.a.b.c.d.e = 'value';
Eine Lösung, die mir eingefallen wäre ist, dass ich die Objektkette einfach per String an eine Funktion übergebe und dann, wenn typeof sub-Objekt 'undefined' zurückgibt dieses Objekt erstelle und am Ende der Funktion dann den Wert zuweise. Nur um euch eine Idee zu vermitteln, das hätte in etwa so ausgesehen (Code ist nicht getestet):
function setObjChainVal(root, chain, val){
var objArr = chain.split('.');
var objArrLen = objArr.length;
for(var i = 0; i < objArrLen; i++){
var curObj = objArr[i];
root[curObj] = root[curObj] || {};
root = root[curObj];
}
root = val;
};
setObjChainVal(obj, 'a.b.c.d.e', 'irgendein Wert');
Für mich richt dieser, mein Code nun ziemlich nach Pfusch und ich wollte fragen, ob man das nicht eleganter lösen kann. Wichtig ist mir auch noch, dass das Ganze in Zombie-Browsern (IE8) läuft. Was ich in meinem Beispielcode auch nicht beachtet habe ist, dass ich "root" auch noch klonen müsste, da ich ansonsten den Wert von "obj" überschreibe.
lg
mark