2016-06-21 9 views
-2

Ich versuche, ein neues Objekt aus einem alten Objekt rekursiv wie zu bauen:Construct neues Objekt in JS mit [] Notation

var arr = {}; 
var markCheckBoxes = function(obj){ 
    var trackArr = new Array(); 
    for(var prop in obj){ 
     if(!!obj[i] && typeof(obj[i])=="object"){ 
      trackArr.push(i); 
      markCheckBoxes(obj[i]); 
      trackArr.pop(); 
     } 
     else{ 
      var str = trackArr.join(".") + "." + i; 
      arr[str] = true; 
     } 
    } 
}; 

Aber das schafft ein flaches Objekt. Zum Beispiel, wenn obj ist:

obj = { 
     prop1: { 
       subprop1: "text", 
       subprop2: "extra" 
     }, prop2:{ 
       subprop: {another: 3} 
     } 
} 

Dann wird die obige Funktion ein Objekt mit Schlüssel erstellt:

{ 
    "prop1.subprop1": true, 
    "prop1.subprop2": true, 
    "prop2.subprop.another": true 
} 
+0

Ich rate von 'new Array()' Ihre ein JS-Neuling. Das Festlegen einer Objekteigenschaft über '[]' funktioniert nur eine Ebene tief. Sie können keine '.' getrennten Eigenschaften festlegen, wie Sie es versuchen. EDIT: Down-Stimmen können sein, weil Sie ein Problem angegeben haben, aber keine Fragen dazu gestellt. – ste2425

+0

@ ste2425 Wie kann ich das mit der Liste der Eltern tun, die ich in 'trackArr' gesammelt habe? – ayushgp

+0

@ ste2425 Und warum sollte ein JS-Pro kein 'neues Array()' benutzen? – ayushgp

Antwort

2

OP wollen Unter der Annahme, andere Kopie des Objekts mit true Wert für die Schlüssel machen, können Sie das ändern Code wie unten

var makeChecks = function(obj){ 
    var cloneTo = {}; 
    for(var prop in obj){ 
    if(obj.hasOwnProperty(prop) && typeof(obj[prop]) === 'object'){ 
    cloneTo[prop] = makeChecks(obj[prop]); 
    } 
    else{ 
    cloneTo[prop] = true; 
    } 
    } 
    return cloneTo; 
} 

var obj = { 
     prop1: { 
       subprop1: "text", 
       subprop2: "extra" 
     }, prop2:{ 
       subprop: {another: 3} 
     } 
} 

var output = makeChecks(obj); 

console.log(output) 

/* 
{ 
"prop1": { 
    "subprop1": true, 
    "subprop2": true 
}, 
"prop2": { 
    "subprop": { 
    "another": true 
    } 
} 
} 
*/ 
Verwandte Themen