设置嵌套对象值

Ken*_*son 3 javascript

我有以下对象:

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 = { ... }

编辑: 所以更具体一点,我试图设置一个嵌套的子对象,但我不会每次都知道哪一个.

Roc*_*mat 5

我们来使用递归!

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)


Rau*_*cia 5

使用递归-重构(感谢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)

谢谢