javascript 对象 - 使用递归函数动态设置嵌套值

标签 javascript javascript-objects

我正在尝试设置嵌套子对象属性之一,但嵌套级别是动态的。

如何动态设置嵌套属性?

它只能工作一个级别的属性,我无法设置下一个内部级别......

我的代码:

function deSerialize(qualifiedNameArray, currentIndex, resultJSON, valueToBeInitializedForFinalNode)
{
    if (currentIndex  == (qualifiedNameArray.length - 1)){
        resultJSON [qualifiedNameArray[currentIndex++]] = valueToBeInitializedForFinalNode;
    }
    else
    {
        resultJSON [qualifiedNameArray[currentIndex++]] = {};
    }

    if (currentIndex < qualifiedNameArray.length)
        deSerialize( qualifiedNameArray, currentIndex, resultJSON, valueToBeInitializedForFinalNode);

    return resultJSON;
}


  var results = {"columnname":"person.name.first", "varcharvalue":"david", "objecttype" : "user"};
    var valueToBeInitializedForFinalNode = results["varcharvalue"];
    var qualifiedNameArray = results["columnname"].split('.');
    var resultJSON = {};
    deSerialize(qualifiedNameArray, 0, resultJSON, valueToBeInitializedForFinalNode);

最佳答案

一个简单的解决方案可能是,不确定这是否是您正在寻找的:

function makeObj(arry, initValue){
    var obj = {}, objRef  = obj, idx = 0;    
    while(idx < arry.length -1){
        obj[arry[idx]] = {};
        obj = obj[arry[idx]];
        idx++;
    }
    obj[arry[idx]] = initValue;
    return objRef;
}

用法:

resultJSON = makeObj( qualifiedNameArray, valueToBeInitializedForFinalNode);

另一种方法是:

function makeObj(objRef, arry, initValue){
    var obj = objRef, idx = 0;    
    while(idx < arry.length -1){
        if(!obj[arry[idx]]) obj[arry[idx]] = {};
        obj = obj[arry[idx]];
        idx++;
    }
    if(!obj[arry[idx]]) obj[arry[idx]] = initValue;
}

这样,您就不会更改任何可能已经存在的值,用法:

makeObj( resultJSON, qualifiedNameArray, valueToBeInitializedForFinalNode);

关于javascript 对象 - 使用递归函数动态设置嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318234/

相关文章:

javascript - 原型(prototype)函数和json符号函数的区别?

javascript - 如果第一个事件使第二个事件为真,如何使 jQuery 需要第二次单击才能启动下一个事件?

javascript - 如何遍历对象中所有唯一的条目对?

Javascript:获取具有随机属性值的对象

javascript - 如何将 Javascript 符号设置为对象键?

Javascript 以干净的方式从数组中删除对象元素(不留下空幽灵)

javascript - 如何在 Jinja2 占位符中包含 javascript 占位符?

javascript - jQuery - 未捕获的类型错误 : string is not a function

javascript - 使用pdfMake创建PDF后如何下载zip文件

JavaScript 在 for 循环中生成包含 <li> 内容的 HTML <ul> 列表