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

时间:2017-06-05 19:03:05

标签: 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]

- 虽然对象的格式为

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

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

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


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

所以我需要一些帮助来将该对象数组映射到templateObject。 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"}]

3 个答案:

答案 0 :(得分:2)

每个serializedArray对象的名称属性都有一个表示嵌套对象的减号(-),您可以按这些字符拆分,然后设置{{1}的值}的属性:

templateObject

答案 1 :(得分:0)

您还可以使用reduce方法,以更实用的方式

const array = [{
  name: 'provider',
  value: 'Aladin'
},{
  name: 'imap-host',
  value: '955'
},{
  name: 'imap-port',
  value: 'something'
}];

const newObject = array.reduce( (acc, item, {}) => {
  acc[item.name] = item.value;
  return acc;
})

console.log(newObject);

链接到小提琴:https://jsfiddle.net/y5xkddnn/

答案 2 :(得分:0)

迭代序列化数组并将其映射到嵌套对象有太多开销。

请考虑这种不太复杂的方法:

@IBOutlet weak var imageView: UIImageView!

我在这里猜到了一些领域。如果需要,请更正。