ich eine Form haben, und ich möchte es ein Ajax-Endpunkt senden, denn dies habe ich diese Hilfsmethode:Wie Objektschlüssel Punktnotation konvertieren Baum auf Objekt in Javascript
$.fn.serializeFormToObject = function() {
//serialize to array
var data = $(this).serializeArray();
//add also disabled items
$(':disabled[name]', this)
.each(function() {
data.push({ name: this.name, value: $(this).val() });
});
//map to object
var obj = {};
data.map(function(x) { obj[x.name] = x.value; });
return obj;
};
Das Problem ist, dass ich Punktnotation haben in einigen der Namen meiner Form (mit MVC stark typisierte Modell) so habe ich dieses Objekt als Ergebnis:
Task.Addresses.Box:""
Task.Addresses.City:"Limal"
Task.Addresses.Country:"Belgique"
Task.Deadline:"1/10/2017 12:18:18 PM"
Task.TaskSourceId:"1"
Und das Ergebnis wäre zu erwarten:
{ Task : { Addresses: { Box: "", City: "Limal", Country: "Belgique"}, Deadline: "1/10/2017 12:18:18 PM", TaskSourceId:"1" } }
Ich benutze die lodash-Bibliothek, aber nach einigen Stunden kann ich keinen Weg finden, dieses erwartete Ergebnis zu erzielen.
Kann mir jemand einen funktionierenden Javascript Helfer zur Verfügung stellen, um das erwartete verschachtelte Objekt zu geben?
Edit: Für duplizierte Frage, die andere Frage stellen sich nicht um kombinierte verschachtelte Objekt zusammen
Nach der Antwort von @ ori-Drori, Dieser Code funktioniert wie erwartet:
$.fn.serializeFormToObject = function() {
//serialize to array
var data = $(this).serializeArray();
//add also disabled items
$(':disabled[name]', this)
.each(function() {
data.push({ name: this.name, value: $(this).val() });
});
//map to object
var obj = {};
data.map(function (x) { obj[x.name] = x.value; });
var objNested = {};
_.forEach(obj, function (value, key) { _.set(objNested, key, value) });
return objNested;
};
Mögliche Duplikat [Konvertieren JavaScript-String in Punktnotation in einen Objektverweis] (http://stackoverflow.com/questions/6393943/convert-javascript-string-in-dot- Notation-in-Objekt-Referenz – haxxxton