Javascript 如何将迭代器(FormData)转换为对象
给定一个Javascript 如何将迭代器(FormData)转换为对象,javascript,iterator,ecmascript-6,Javascript,Iterator,Ecmascript 6,给定一个form元素newformdata(form)会返回一个迭代器 // [["key1", "val1"],["key2", "val2"]] console.log([new FormData(form)...]) 现在,我想将其转换为以下形式的对象: { "key1": "val1", "key2": "val2" } 使用ES6/7功能(由babel支持) 如果这可以通过函数方法实现,您有什么想法吗?您可以使用for..of循环 var formData=new formDat
form
元素newformdata(form)
会返回一个迭代器
// [["key1", "val1"],["key2", "val2"]]
console.log([new FormData(form)...])
现在,我想将其转换为以下形式的对象:
{ "key1": "val1", "key2": "val2" }
使用ES6/7功能(由babel支持)
如果这可以通过函数方法实现,您有什么想法吗?您可以使用
for..of
循环
var formData=new formData();
formData.追加(“a”,123);
格式数据。附加(“b”,456);
var obj={};
对于(formData的let prop){obj[prop[0]]=prop[1]};
log(obj)
您可以简单地定义一个对象并通过迭代器循环,从中获取值并将其分配给您创建的对象
var fd = new FormData(someForm);
po = {};
for (var key of fd){
po[key] = fd[key];
}
您可以
。使用spread…
操作符减少所生成的数组
[...new FormData(document.querySelector('form'))].reduce((o, [k, v]) => {
o[k] = v;
return o;
}, {}); // Object {"key1": "val1", "key2": "val2"}
使用功能性方法
function getFormObj(form) {
return [...new FormData(form)].reduce((prev, [key,val]) => {
return Object.assign(prev, {[key] : val}) ;
}, {}) ;
}
post中的“一个快速而肮脏的方法”方法似乎并没有返回所有属性,FormData
object?的值@guest271314 a u被右键删除了它您知道,对象文本
将是源代码中的文本。您可能是指普通对象之类的东西,hm,var o={};对于formData.entries()的(var[key,[o[key]];返回o
应该可以。这是不是尽可能的花哨呢?我想你需要使用fd.get(key)
。formData
实例更像是一个Map
而不是一个对象。我在Chrome版本50.0.2661.102 m(64位)中测试过这一点在发布之前,我从未使用过.get
,尽管我有一段时间没有尝试过。嗯,iterable界面看起来还是很新的。不知道Chrome实现了什么。使用…of formData.entries()
也没有错。更明确一些的人甚至会说它更好。@Bergi一直在尝试做var[…obj]=[…formData.entries()];obj=obj.reduce(函数(o,prop){o[prop[1]]=prop[1]},{})
尽管合并了.reduce()
将部分分配到rest元素的第一部分;或者直接赋值而不使用.reduce()
[…obj]
没有任何意义,这相当于直接赋值给obj
。或者只使用数组.from(formData.entries()).reduce(…)
一气呵成。FormData
对象是一个可iterable吗?@guest271314iterable;
@guest271314:您在自己的答案中对一个FormData
实例使用了,现在正在询问它是否可iterable?甚至更不可更改,只有一行:[…FormData]。reduce((o[k,v])=>({…o[k]:v}),{};