那里有什么好主意可以帮助我解决有关javascript多维数组构建器的问题吗?
我真正想做的事情就是......即我有一个名为“fields.0.fld.0.first_name
”的表单字段,该字段名称需要转换为javascript数组格式。这里的0表示标识符,它表示该字段名称中的“字段”字必须/预期以'new Array()
'开头,因为它将处理多个没有特定索引的子元素。还有一些其他字符串(一个非整数)只能作为'Object
'类型的js数组或简称为'{}'(这是字段名称的最后一部分'{{1} }',格式化为'first_name
')。
现在,由于目的是获取表单中的字段,我正在寻找一个函数,它将自动生成那些字段的构造json格式,当然值为:-)。样本json格式输出必须是......
{first_name: value}
答案 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;子元素。 :-)
干杯