2013-08-16 15 views
3

我想將包含方括號的字段名轉換爲JavaScript中的對象。我已經看到PHP確實將它們轉換爲數組,但是儘管在數天內搜索了一個,但還沒有看到過使用JavaScript完成的一個數組。需要將帶方括號的字段名轉換爲javascript對象

數據:

<input name="address[permanent][name]" type="text" value="My Address"> 
<input name="address[permanent][street][street_one]" type="text" value="My Street One"> 
<input name="address[permanent][street][street_two]" type="text" value="My Street Two"> 

結果(我想要什麼來實現):

form = { address: { permanent: { name: "My Address", street: { street_one: "My Street One", street_two: "My Street Two" } } } } 

回答

1

未經檢驗的,但你的基本算法可能是這樣的:

以下作品對我來說:

var form = {}; 
$(':input', yourFormElement).each(function(){ 
    var top = form; 
    var path = $(this).attr('name'); 
    var val = $(this).val(); 
    var prev = ''; 
    while ((path.replace(/^(\[?\w+\]?)(.*)$/, function(_m, _part, _rest) { 
    prev = path; 
    _part = _part.replace(/[^A-Za-z_]/g, ''); 
    if (!top.hasOwnProperty(_part)) { 
     if (/\w+/.test(_rest)) { 
     top[_part] = {}; 
     top = top[_part]; 
     } else { 
     top[_part] = val; 
     } 
    } else if (!/\w+/.test(_rest)) { 
     top[_part] = val; 
    } else { 
     top = top[_part]; 
    } 
    path = _rest; 
    })) && (prev !== path)); 
}); 

用jQuery表達式替換yourFormElement以獲取所需的表單元素。

對每個:input元素(表單輸入)進行迭代,然後針對每個循環嘗試使用正則表達式分解名稱的「路徑」,同時創建和/或遍歷數據結構正在建立。最後,輸入的值被分配給已經遍歷到的葉節點。它的工作

例子:http://jsfiddle.net/8fpLx/10/

該系列的while循環中的條件可以簡化很多,但它的作品。

+0

大量的錯誤...修復... –

+0

固定終止和解析錯誤。 –

+0

有點問題!表單對象需要像樹一樣。 'form-> permanent - >(name)/(street - >(street_one/street_two))' – musaid

相關問題