【问题标题】:how to build javascript object dynamically with array values如何使用数组值动态构建 javascript 对象
【发布时间】:2014-10-27 13:46:23
【问题描述】:

我需要从数组值创建对象属性并为其分配一些值,例如

var main_obj = {};
var dynamic_array = ["value1", "value2", "value3", "value4"];

来自dynamic_array 我需要创建main_obj 喜欢:

main_obj[value1][value2][value3] = some_value;

请给我一些建议。

【问题讨论】:

  • 你的意思是:main_obj[dynamic_array[0]] 等等...?
  • 好吧,如果是这样,你可以使用像this code这样的奇怪的东西。
  • 价值从何而来?这个问题实在是太缺乏细节了
  • @charlietfl 我在运行时获取值并推入动态数组
  • 实际上我的 main_obj = {"value1":{"value2":{"value3":}}} 就是这样我需要做的是我需要解析直到 value3 并添加新的对象,dynamic_array 是我需要解析多长时间的参考。

标签: javascript jquery object javascript-objects


【解决方案1】:
dynamic_array.forEach(function(prop){
   main_obj[prop] = some_value;  
});

【讨论】:

    【解决方案2】:

    这是另一种方式

    var dynamic_array = ["value1","value2","value3"];
    var value = 'your value';
    
    function createobj(dynamic_array,value){
        var count = dynamic_array.length;
        var text= '';
        var ended = '';
        for(var i = 0; i < count; i++){
          text += '{"'+dynamic_array[i]+'":';
          ended +='}';
        }
        text += '"'+value+'"'+ended;
        return JSON.parse(text);
    }
    console.log(createobj(dynamic_array,value));
    

    【讨论】:

    • 实际上我的 main_obj = {"value1":{"value2":{"value3":}}} 就是这样我需要做的是我需要解析直到 value3 并添加新的对象,dynamic_array 是我需要解析多长时间的参考。谢谢
    • 实际上我的 main_obj = {"value1":{"value2":{"value3":}}} 就是这样我需要做的是我需要解析直到 value3 并添加新的对象,dynamic_array 是我需要解析多长时间的参考。
    【解决方案3】:

    试图解释您的问题,这可能是您正在寻找的解决方案:

    function createNestedProperties(obj, array, value) {
        var result = {};
        var result_tmp = obj;
        var i = 0;
        while (i < array.length) {
            if (i < (array.length - 1))
                result_tmp[array[i]] = {};
            else
                result_tmp[array[i]] = value;
            result_tmp = result_tmp[array[i]];
            i++;
        }
        return obj;
    }
    

    这样使用:

    var main_obj = {"value1":{"value2":{"value3":{}}}};
    var dynamic_array = ["value1", "value2", "value3"];
    
    main_obj = createNestedProperties(main_obj, dynamic_array, {"value_Z":"new value"});
    

    结果对象:

    {"value1":{"value2":{"value3":{"value_Z":"new value"}}}}
    

    此函数将覆盖main_obj 中的现有属性(如果已经存在)。

    【讨论】:

    • @Troy 我稍微更新了上面的代码,使用该函数您将能够将新的 {...} 对象设置为“value3”属性(如果存在,可能会覆盖现有值)。
    【解决方案4】:

    我递归地解析对象,而不是构建 jQuery - How to recursively loop over an object's nested properties?

        function recursiveIteration(main_obj) {
            for (var property in main_obj) {
                if (property == value3)
                {
                    main_obj[property] = {"value4":test};
                }
                else
                {
                    recursiveIteration(main_obj[property]);
                }
            }
        }
        recursiveIteration(main_obj);
    

    【讨论】:

    • 这不是一个绝对的解决方案,仅适用于固定属性,不应优于其他(更正确的)建议。
    猜你喜欢
    • 2015-11-05
    • 2021-03-31
    • 2020-03-21
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多