簡體   English   中英

需要將帶有方括號的字段名稱轉換為javascript對象

[英]need to convert field name with square brackets into a javascript object

我想將由方括號組成的字段名稱轉換為JavaScript中的對象。 我已經看到PHP確實將它們轉換為數組但是在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" } } } }

未經測試,但您的基本算法可能是這樣的:

以下適用於我:

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元素(表單輸入)然后為每個循環嘗試使用正則表達式分解名稱的“路徑”,同時創建和/或遍歷正在構建的form數據結構起來。 最后,輸入的值被分配給已遍歷的葉節點。

工作示例: http//jsfiddle.net/8fpLx/10/

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM