javascript - 将数组动态映射到嵌套对象

标签 javascript arrays object dictionary indexof

我想在提交时检索表单内容并将该数据映射到一个对象。

let userData = $(e.currentTarget).serializeArray();
let userDataObject = this.serializedToObject(userData);

-- 要通过 POST 发送的模板对象

serializedToObject(serializedArray) {
        let templateObject = {
            privider: '',
            pop3: {
                host: '',
                port: 110,
                ssl: false
            },
            imap: {
                host: '',
                port: 993
            },

            email: '',
            password: ''
        };

        for (let data in serializedArray) {
        }

        return templateObject;
    }

-- userData 的形式是

[Object, Object, Object, Object, Object, Object, Object]

-- 虽然 on object 是 form

Object: {
  name: 'provider',
  value: 'Aladin'
}

Object: {
  name: 'imap-host',
  value: '955'
}

Object: {
  name: 'imap-port',
  value: 
}


Object: {
  email: 'test@gmail.com',
  value: 
}

所以我需要一些帮助来将该对象数组映射到模板对象。 AnyHelp 将不胜感激。

更新

[{"name":"name","value":"Nicholas Barbaros"},{"name":"email","value":"george@google.com"},{"name":"password","value":"nicu121-mujik"},{"name":"imap","value":"imap.server.com"},{"name":"imap-port","value":"ad"},{"name":"pop3-host","value":"pop.server.com"},{"name":"pop3-port","value":"465"}, {"name":"pop3-ssl","value":"false"}]

最佳答案

每个serializedArray对象的name-property都有一个减号(-)表示嵌套对象,你可以按这些字符拆分然后设置值templateObject 的属性:

var serializedArray = [{"name":"name","value":"Nicholas Barbaros"},{"name":"email","value":"george@google.com"},{"name":"password","value":"nicu121-mujik"},{"name":"imap","value":"imap.server.com"},{"name":"imap-port","value":"ad"},{"name":"pop3-host","value":"pop.server.com"},{"name":"pop3-port","value":"465"}, {"name":"pop3-ssl","value":"false"}];

// your defaults
var templateObject = {
    provider: '',
    pop3: {
        host: '',
        port: 110,
        ssl: false
    },
    imap: {
        host: '',
        port: 993
    },
    email: '',
    password: '',
};

serializedArray.forEach(function(obj) {
    var deep = obj.name.split('-');
    var key = deep.pop();

    var level = templateObject;
    deep.forEach(function(inner) {
        var nested = level[inner];
        var isObject = Object(nested) === nested;
        level = isObject ? nested : {};
    });

    level[key] = obj.value;
});

// return templateObject; // when inside your function
console.log(templateObject);

关于javascript - 将数组动态映射到嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44375934/

相关文章:

c++ - 从数组访问 SDL_Rect 成员时出现垃圾值?

javascript - 将流传输到无处

javascript - 如何在 MongoDB 聚合中进行 $match 然后在 $group 阶段进行累加

c# - 使用索引 C# 返回数组的子集

c++ - 在构造函数中初始化一个 const 数组

javascript - React 中的多个过滤器

java - 将对象的类转换为子类

javascript - 如何使用javascript转换日期格式

javascript - 传递参数数组而不改变它

c# - 播放数组中的声音会返回错误C#-Visual Studio