具有多个sting键的Javascript数组构建器

时间:2017-02-21 01:56:24

标签: javascript arrays json

那里有什么好主意可以帮助我解决有关javascript多维数组构建器的问题吗?

我真正想做的事情就是......即我有一个名为“fields.0.fld.0.first_name”的表单字段,该字段名称需要转换为javascript数组格式。这里的0表示标识符,它表示该字段名称中的“字段”字必须/预期以'new Array()'开头,因为它将处理多个没有特定索引的子元素。还有一些其他字符串(一个非整数)只能作为'Object'类型的js数组或简称为'{}'(这是字段名称的最后一部分'{{1} }',格式化为'first_name')。

现在,由于目的是获取表单中的字段,我正在寻找一个函数,它将自动生成那些字段的构造json格式,当然值为:-)。样本json格式输出必须是......

{first_name: value}

1 个答案:

答案 0 :(得分:0)

好的,我已经解决了。基于命名结构和所需的逻辑,我发现js eval非常有用。现在我可以使用下面的函数创建多维数组的js。

function _arr_definer(items, _arr_handler, _curr, _val)  
    {
        var _tmp_indexes = "";
        if(_curr > 0){
            for(var _i = 0; _i < _curr; _i++){
                if(Number(items[_i]) >= 0)
                    _tmp_indexes += "[" + items[_i] + "]";
                else
                    _tmp_indexes += "['" + items[_i] + "']";
            }

            if(typeof eval("_arr_handler" + _tmp_indexes + "['" + items[_curr] + "']") == 'undefined'){
                if(Number(items[_curr]) >= 0){
                    if(typeof items[_curr + 1] != 'undefined'){
                        if(Number(items[_curr + 1]) >= 0){
                            var _temp_sub = [];
                            if(typeof eval("_arr_handler" + _tmp_indexes) != 'undefined')
                                eval("_temp_sub = _arr_handler" + _tmp_indexes);
                            _temp_sub[items[_curr]] = [];
                            eval("_arr_handler" + _tmp_indexes + " = _temp_sub;");   
                        }else{
                            var _temp_sub = [];
                            if(typeof eval("_arr_handler" + _tmp_indexes) != 'undefined')
                                eval("_temp_sub = _arr_handler" + _tmp_indexes);

                            _temp_sub[items[_curr]] = {};
                            eval("_arr_handler" + _tmp_indexes + " = _temp_sub;");   
                        }
                    }else{ //assign value
                        eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"'] = _val;");
                    }
                }else{
                    if(typeof items[_curr + 1] != 'undefined'){
                        if(Number(items[_curr + 1]) >= 0){
                            var _temp_sub = {};
                            if(typeof eval("_arr_handler" + _tmp_indexes) != 'undefined')
                                eval("_temp_sub = _arr_handler" + _tmp_indexes);
                            _temp_sub[items[_curr]] = [];
                            eval("_arr_handler" + _tmp_indexes + " = _temp_sub;");   
                        }else{
                            var _temp_sub = {};
                            if(typeof eval("_arr_handler" + _tmp_indexes) != 'undefined')
                                eval("_temp_sub = _arr_handler" + _tmp_indexes);
                            _temp_sub[items[_curr]] = {};
                            eval("_arr_handler" + _tmp_indexes + " = _temp_sub;");   
                        }
                    }else{ //assign the value
                        eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"'] = _val;");
                    }
                }
            }
        }else{
            if(typeof eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"']") == 'undefined'){
                if(typeof items[_curr + 1] != 'undefined'){
                    if(Number(items[_curr + 1]) >= 0){
                        eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"'] = [];");
                    }else{
                        eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"'] = {};");
                    }
                }else{ //assign the value
                    eval("_arr_handler" + _tmp_indexes + "['"+ items[_curr] +"'] = _val;");
                }
            }
        }

        if(typeof items[_curr + 1] != 'undefined'){
            _arr_definer(items, _arr_handler, _curr + 1, _val);
        }
    }

使用它只需遵循以下声明即可。

var _arr_handler = {};

    var _items = "fields.0.flds.0.conClass".split('.');
    _arr_definer(_items, _arr_handler, 0, 'This is a testing content');

    var _items = "fields.0.flds.0.first_name".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "fields.0.flds.0.subnames.0.nice".split('.');
    _arr_definer(_items, _arr_handler, 0);


    var _items = "other.cool.cool1.cooler.test".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "other.cool.cool1.othersubs.0".split('.');
    _arr_definer(_items, _arr_handler, 0, true);

    var _items = "other.cool.cool1.othersubs.1".split('.');
    _arr_definer(_items, _arr_handler, 0, false);

    var _items = "more_field_1".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_2".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_3".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_4.subs.0.item_1".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_4.subs.0.item_2".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_4.subs.0.item_3".split('.');
    _arr_definer(_items, _arr_handler, 0);

    var _items = "more_field_4.subs.0.item_4".split('.');
    _arr_definer(_items, _arr_handler, 0);

    console.log(_arr_handler);

这样做的目的是......将MongoDB文档保存在一个触发器中,仅包括子&gt; sub-&gt; sub-&gt;子元素。 :-)

干杯