2017-02-21 23 views
0

有什麼偉大的想法,有可以幫助我解決關於JavaScript的多維數組建設者我的問題?JavaScript數組建設者多刺鍵

我真正想要做的事情是...即我有一個名爲'fields.0.fld.0.first_name'的表單字段,該字段名稱需要轉換爲javascript數組格式。 0這裏指的標識,它歸類的「域」在該字段名稱言必/預計將開始爲「new Array()」,因爲這會處理沒有具體的指標多個子元素。和其他一些字符串(非整數)將只被預期的那樣「Object」 JS數組類型或簡稱爲「{}」(這是字段名「first_name」的最後一部分,將被格式化像'{first_name: value}')。現在

,因爲目的是爲了獲得在表單中的字段,我正在尋找將自動生成這些字段的構建JSON格式,當然值:-)功能。示例json格式輸出必須是...

{"fields" : [ 
     { 
      "_id" : "", 
      "type" : "text", 
      "name" : "test1", 
      "id" : "", 
      "class" : "", 
      "conClass" : "s12", 
      "label" : "", 
      "required" : false, 
      "deleted" : false 
     }, 
     { 
      "_id" : "", 
      "type" : "group", 
      "gStart" : "", 
      "gEnd" : "", 
      "flds" : [ 
       { 
        "_id" : "", 
        "type" : "text", 
        "name" : "test2", 
        "id" : "", 
        "class" : "", 
        "conClass" : "s12", 
        "label" : "", 
        "required" : false, 
        "deleted" : false 
       } 
      ] 
     } 
    ] 
} 
+6

您是否期待我們爲您編寫代碼?您應該向我們展示您嘗試過什麼,它做了什麼以及您的期望,以便我們可以幫助您。 – Telokis

+0

我已經發布了它。我不知道如何遵守,這就是我在這裏發佈的原因。如果你會參考我的嘗試,那麼你也可能會得到一個錯誤的答案。我指的是那些有着卓越創意或者已經解決了相同問題的人。 –

+0

對不起,但我想你誤解了StackOverflow的目標。我們在這裏幫助您瞭解您編寫的代碼,對不起。 – Telokis

回答

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的文檔中的一個觸發僅包括子>子>子>子元素。 :-)

Cheers