2014-11-21 24 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);