我有以下对象:
var object = {
"property1": "value1",
"property2": "value2",
"subobject": {
"property1": "value1",
"property2": "value2",
"subobject": {
"property1": "value1",
"property2": "value2",
"subobject": {...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图设置一个嵌套的子对象属性,但嵌套级别是动态的.
如何在不执行以下操作的情况下动态设置其中一个嵌套属性:object.subobject.subobject = { ... }?
编辑: 所以更具体一点,我试图设置一个嵌套的子对象,但我不会每次都知道哪一个.
我们来使用递归!
function setNest(obj, level, val){
if(level > 0){
setNest(obj.subobject, level-1, val);
}
else{
obj.subobject = val;
}
}
Run Code Online (Sandbox Code Playgroud)
然后称之为:
setNest(object, 2, {a: 12});
Run Code Online (Sandbox Code Playgroud)
使用递归-重构(感谢Rocket Hazmat)
此功能对我有用!
/**
* @obj: the json object to change
* @access: string dot separates route to value
* @value: new valu
*/
function setValue(obj,access,value){
if (typeof(access)=='string'){
access = access.split('.');
}
if (access.length > 1){
setValue(obj[access.shift()],access,value);
}else{
obj[access[0]] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
有一个对象:
var jsonObject = {
'name' : 'pepe',
'links' :
{
'link1' : 'one',
'link2' : 'two',
'link3' :
{
'link31' : '3url',
'link32' : '3url',
'link33' : '3url'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下方法轻松更改值:
setValue(jsonObject,'links.link3.link32','new value!!!');
Run Code Online (Sandbox Code Playgroud)
谢谢