如何在javascript中将对象关键点符号转换为对象树

如何在javascript中将对象关键点符号转换为对象树,javascript,jquery,lodash,Javascript,Jquery,Lodash,我有一个表单,我想将其发送到ajax端点,为此我有一个助手方法: $.fn.serializeFormToObject = function() { //serialize to array var data = $(this).serializeArray(); //add also disabled items $(':disabled[name]', this) .each(function() {

我有一个表单,我想将其发送到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;
};
使用迭代数据,并使用以下命令将值分配给路径名:

我没有你的原始数据,所以这里有一个使用你提供的键值的演示

变量字段={ Task.Addresses.Box:, Task.address.City:利马尔, Task.address.Country:比利时, 任务截止日期:2017年10月1日12:18:18, Task.TaskSourceId:1 }; var obj={}; _.forEachfields、functionvalue、key{ _.setobj,键,值; }; console.logobj; 使用迭代数据,并使用以下命令将值分配给路径名:

我没有你的原始数据,所以这里有一个使用你提供的键值的演示

变量字段={ Task.Addresses.Box:, Task.address.City:利马尔, Task.address.Country:比利时, 任务截止日期:2017年10月1日12:18:18, Task.TaskSourceId:1 }; var obj={}; _.forEachfields、functionvalue、key{ _.setobj,键,值; }; console.logobj;
Hi的可能副本Hi的可能副本,反之亦然。如果我需要反对的话。点域?更复杂但可行。打开另一个问题。请检查这是什么,反之亦然。如果我需要反对的话。点域?更复杂但可行。打开另一个问题。请查收
data.forEach(function(x) { _.set(obj, x.name, x.value) });