2014-04-10 20 views
5

eine Zeichenfolge als Punktnotation gegeben, wie würde ich ein Objekt aus dieser Zeichenfolge (Überprüfung für bereits bestehende Objekte) erstellen: zBConvert String mit Punktnotation zu JSON

var obj = {}; 
stringToObj('a.b', 'value1', obj); 
stringToObj('a.b.c', 'value2', obj); 

produzieren würde

{ 
    "a": { 
    "b": { 
     "_x": "value1", 
     "c": { 
      "_x": "value2" 
     } 
    } 
    } 
} 

Ich habe mir this question und this one angesehen, aber beides scheint für das, was ich mache, nicht ausreichend zu sein.

Irgendwelche Gedanken?

+2

Es gibt hier keine JSON. –

+0

Oder Objekt .. Kartoffel/PotAto .. –

+1

Mehr wie Apfel/Orange. JSON ist eine Zeichenfolge, die ein Objekt in JavaScript-kompatibler Notation darstellt. Ein Objekt ist ... ein Objekt. –

Antwort

8

Sie können die Vorteile von Referenzen nehmen:

function stringToObj(path,value,obj) { 
    var parts = path.split("."), part; 
    while(part = parts.shift()) { 
     if(typeof obj[part] != "object") obj[part] = {}; 
     obj = obj[part]; // update "pointer" 
    } 
    obj["_x"] = value; 
} 
+0

Genie. Vielen Dank. –

6

Für diejenigen von Ihnen, die ohne die _x im Objekt versuchen, diesen Code für Lösung suchen. Eine leichte Modifikation des obigen Codes (die brillant)

stringToObj = function(path,value,obj) { 
    var parts = path.split("."), part; 
    var last = parts.pop(); 
    while(part = parts.shift()) { 
    if(typeof obj[part] != "object") obj[part] = {}; 
    obj = obj[part]; // update "pointer" 
    } 
obj[last] = value; 
} 

Als Bonus wird der obige Code funktionieren, wenn Sie Teile eines vorhandenen Objekts :) aktualisieren möchten

var obj = {a:{b:3}}; 
stringToObj("a.b",10,obj); 
console.log(obj); //result : {a:{b:10}}