如何将迭代器(FormData)转换为对象

时间:2016-05-29 15:23:02

标签: javascript iterator ecmascript-6

给定form元素new FormData(form)返回一个迭代器。

// [["key1", "val1"],["key2", "val2"]]
console.log([new FormData(form)...])

我现在想将其转换为表格的对象:

{ "key1": "val1", "key2": "val2" }

使用ES6 / 7功能(由babel支持)。

任何想法是否可以通过功能方法进行?

4 个答案:

答案 0 :(得分:6)

您可以.reduce使用传播...运算符

创建数组
[...new FormData(document.querySelector('form'))].reduce((o, [k, v]) => {
    o[k] = v;
    return o;
}, {}); // Object {"key1": "val1", "key2": "val2"}

答案 1 :(得分:1)

您可以使用for..of循环



var formData = new FormData();
formData.append("a", 123);
formData.append("b", 456);
var obj = {};
for(let prop of formData) {obj[prop[0]] = prop[1]};
console.log(obj)




或者,使用rest elementFormData()返回IteratorArray.prototype.forEach()



var formData = new FormData();
formData.append("a", 123)
formData.append("b", 456)
var res = (d, it = [...d], r = {}, t =!(it.forEach(([k, v]) => {r[k] = v}))) => r;
console.log(res(formData))




答案 2 :(得分:0)

您可以简单地定义一个对象并循环遍历迭代器以从中获取值并将其分配给您创建的对象。

var fd = new FormData(someForm);
po = {};
for (var key of fd){
  po[key] = fd[key];
}

答案 3 :(得分:0)

使用函数式

function getFormObj(form) {

 return  [...new FormData(form)].reduce((prev, [key,val]) => {
    return Object.assign(prev, {[key] : val}) ; 
  }, {}) ; 
}