2015-07-01 3 views
5

Ich habe eine Form wie folgt aus:Formular serializeArray get Schlüssel: Wert, wenn der Schlüssel verschachtelte Array in HTML ist?

<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> 
... 

Nun, wenn ich die Ausgabe wie folgt aus $('form').serializeArray(); auf diese nennen:

[ 
    { 
     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" 
    }, 
    // ... 
] 

Wie kann ich das machen sein wie:

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

? Gibt es einen Weg, der keine verschachtelten Schleifen benötigt?

+0

Antwort ist hier http://stackoverflow.com/questions/19643310/jquery-serialize-form-data-to-associated-array –

+0

Es gibt ein Plugin für das, wenn Sie nicht Ihr eigenes bauen möchten: https: // github .com/macek/jquery-serialize-Objekt –

Antwort

0

OK, ich weiß, dass meine Frage fallspezifisch ist, aber vielleicht hilft das auch jemandem. Ich kam mit meinem eigenen einfachen (glaube ich) Lösung (es ist in 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 

Übersetzt in reine JS sollte es sein:

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); 

erzeugt diese Ausgabe:

{ 
    0: 
     { 
      "name": "ABC", 
      "color": "Blue", 
      "height": "41", 
      "weight": "10" 
     } 
    1: 
     { 
      "name": "XYZ", 
      "color": "Pink", 
      "height": "27", 
      "weight": "7" 
     } 
} 
Verwandte Themen