我有一个表单,我想将它发送到ajax端点,为此我有这个帮助方法:
$.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;
};
问题是我在我的表格的某些名称中有点符号(使用MVC强类型模型) 所以我得到了这个结果:
Task.Addresses.Box:""
Task.Addresses.City:"Limal"
Task.Addresses.Country:"Belgique"
Task.Deadline:"1/10/2017 12:18:18 PM"
Task.TaskSourceId:"1"
预期结果将是:
{ Task : { Addresses: { Box: "", City: "Limal", Country: "Belgique"}, Deadline: "1/10/2017 12:18:18 PM", TaskSourceId:"1" } }
我使用的是lodash库,但几个小时后我找不到办法来做这个预期的结果。
有人可以为我提供一个有效的javascript助手来提供预期的嵌套对象吗?
编辑: 对于重复的问题,另一个问题不是要求将组合的嵌套对象放在一起
在@ ori-drori回答之后,此代码按预期工作:
$.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;
};
答案 0 :(得分:2)
使用Array#forEach
迭代数据,并使用_.set()
将值分配给路径(名称):
data.forEach(function(x) { _.set(obj, x.name, x.value) });
我没有原始数据,所以这是使用您提供的键值的演示。
var fields = {
"Task.Addresses.Box": "",
"Task.Addresses.City": "Limal",
"Task.Addresses.Country": "Belgique",
"Task.Deadline": "1/10/2017 12:18:18 PM",
"Task.TaskSourceId": "1"
};
var obj = {};
_.forEach(fields, function(value, key) {
_.set(obj, key, value);
});
console.log(obj);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;