Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将迭代器(FormData)转换为对象_Javascript_Iterator_Ecmascript 6 - Fatal编程技术网

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吗?@guest271314
iterable;
@guest271314:您在自己的答案中对一个
FormData
实例使用了
,现在正在询问它是否可iterable?甚至更不可更改,只有一行:
[…FormData]。reduce((o[k,v])=>({…o[k]:v}),{};