2014-11-21 25 views
0

我讀過了關於stackoverflow的現有問題this在javascript對象(json)中的動態設置值

我的目標是要在一個屬性「嵌套屬性,並設置一個新的值(不EVAL!):

什麼,我已經是一個動態的字符串作爲例子:‘A.B.C

而且一JSON對象:

var obj ={ 
    A: { 
     B: { 
      C: 23 
      C1: {} 
      } 
    } 
} 

現在我想訪問該屬性和設置:

如果字符串我可以令狀性質的固定量e:

obj[prop1][prop2][prop3] = 42 

什麼樣的方式使這種動態,所以當傳遞「A.B」在B的對象被替換?

+0

遞歸是你所需要的 – hindmost 2014-11-21 14:30:40

+0

例子:http://stackoverflow.com/questions/16564027/javascript-access-object-array -by-array-notation-string – 2014-11-21 14:31:54

+0

遞歸或堆棧。你可以循環遍歷每個級別。按'.'拆分,你就完成了:) – Wolph 2014-11-21 14:31:57

回答

0

像這樣的事情會運行

var str = "A.B.C"; 
 
var obj ={ 
 
    A: { 
 
    B: { 
 
     C: 23, 
 
     C1: {} 
 
    } 
 
    } 
 
}; 
 
updateObj(obj,str,10); 
 

 
function updateObj(obj,str,val){ 
 
    var tok = str.split("."); 
 
    var update = function(obj, index){ 
 
    if (index < tok.length){ 
 
     if (!obj.hasOwnProperty(tok[index])){ 
 
     obj[tok[index]] = {}; 
 
     } 
 
     if (index == tok.length-1){ 
 
     obj[tok[index]] = val; 
 
     } 
 
     update(obj[tok[index]],++index); 
 
    } 
 

 
    } 
 
    update(obj,0); 
 
} 
 

 
console.log(obj);