Nemox: javascript sub-Object erstellen falls nicht vorhanden

Beitrag lesen

Hey,

ich bin gerade am überlegen wie ich eine Funktion schreiben könnte, die es mir erlaubt sub-Objekte zu erstellen, wenn diese nicht existieren.

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)

Und funktioniert auch nicht.

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.

Bestimmt!

Wie findest du das hier?

function setObjChainVal(root, chain, val) {
    chain = chain.split('.');
    var obj = root,
        l = chain.length - 1;
    for (var i = 0; i < l; i++)
      obj = (chain[i] in obj) ? obj[chain[i]] : obj[chain[i]] = {};
    obj[chain[l]] = val;
    return root;
}

console.log(setObjChainVal({}, 'a.b.c.d.e', 'value'));

Zu beachten ist, dass du in deiner Kette auch wirklich auf Objekte oder noch nicht vorhandene Eigenschaften zugreifen musst, nicht auf Primitives. Aber ich denke, dass das für deine Zwecke vollkommen ausreicht.

Ich entnehme deinem Code, dass du noch nicht sehr viel Erfahrung mit JS hast, also zögere bitte nicht zu fragen, falls etwas unklar an meinem Code sein sollte.

Nemox