2015-07-01 15 views
5

Tôi có một hình thức như thế này:Biểu mẫu serializeArray nhận khóa: giá trị nếu khóa là mảng lồng nhau trong HTML?

<select name="dog[0][name]">...</select> 
<select name="dog[0][color]">...</select> 
<select name="dog[0][height]">...</select> 
<select name="dog[0][weight]">...</select> 

<select name="dog[1][name]">...</select> 
<select name="dog[1][color]">...</select> 
<select name="dog[1][height]">...</select> 
<select name="dog[1][weight]">...</select> 
... 

Bây giờ, nếu tôi gọi $('form').serializeArray(); về vấn đề này đầu ra là như thế này:

[ 
    { 
     name: "dog[0][name]", 
     value: "ABC" 
    }, 
    { 
     name: "dog[0][color]", 
     value: "Blue" 
    }, 
    { 
     name: "dog[0][height]", 
     value: "41" 
    }, 
    { 
     name: "dog[0][weight]", 
     value: "10" 
    }, 
    { 
     name: "dog[1][name]", 
     value: "XYZ" 
    }, 
    { 
     name: "dog[1][color]", 
     value: "Pink" 
    }, 
    { 
     name: "dog[1][height]", 
     value: "27" 
    }, 
    { 
     name: "dog[1][weight]", 
     value: "7" 
    }, 
    // ... 
] 

Làm thế nào tôi có thể làm điều này là như sau:

{ 
    dog: [ 
     0: {"name": "ABC", "color": "Blue", "height": 41, "weight": "10"} 
     1: {"name": "XYZ", "color": "Pink", "height": 27, "weight": "7"} 
    ] 
} 

? Có cách nào không yêu cầu vòng lặp lồng nhau không?

+0

trả lời là ở đây http://stackoverflow.com/questions/19643310/jquery-serialize-form-data-to-associated-array –

+0

Có một plugin cho rằng nếu bạn không muốn xây dựng của riêng bạn: https: // github .com/macek/jquery-serialize-object –

Trả lời

0

OK, tôi biết câu hỏi của tôi là trường hợp cụ thể, nhưng có lẽ điều này cũng sẽ giúp ai đó. Tôi đến với đơn giản của riêng tôi (tôi nghĩ) giải pháp (đó là trong coffeescript):

values = $('form').serializeArray() 

model = {} 
for val in values 
    matches = val.name.match /dog\[(.*)\]\[(.*)\]/ 
    model[matches[1]] = {} if !model[matches[1]] 
    model[matches[1]][matches[2]] = val.value 
console.log model 

dịch sang JS thuần nó nên là:

var values = $('form').serializeArray(); 

var model = {}; 
for (var i = 0, var len = values.length; i < len; i++) { 
    var val = values[i]; 
    var matches = val.name.match(/dog\[(.*)\]\[(.*)\]/); 
    if (!model[matches[1]]) { 
     model[matches[1]] = {}; 
    } 
    model[matches[1]][matches[2]] = val.value; 
} 
console.log(model); 

Tạo đầu ra này:

{ 
    0: 
     { 
      "name": "ABC", 
      "color": "Blue", 
      "height": "41", 
      "weight": "10" 
     } 
    1: 
     { 
      "name": "XYZ", 
      "color": "Pink", 
      "height": "27", 
      "weight": "7" 
     } 
} 
Các vấn đề liên quan