Javascript 表单数据到数组

Jen*_*ell 3 javascript forms form-data

如何将 formData“转换”为数组?

这对我来说效果很好,但似乎不适用于所有浏览器: https ://developer.mozilla.org/en-US/docs/Web/API/FormData/entries

有没有办法在支持旧版浏览器的情况下做同样的事情?

var form_data = new FormData(this);
var form_array = [];

for(var pair of formData.entries()) {
   form_array[pair[0]] = pair[1];
}
Run Code Online (Sandbox Code Playgroud)

更新

我尝试了这个但没有运气:

var entries = form_data.entries();

for (var i = 0; i < entries.length; i++) {
    console.log(entries[i]);
}
console.log(entries);
Run Code Online (Sandbox Code Playgroud)

它给了

Iterator {}
Run Code Online (Sandbox Code Playgroud)

Rún*_*erg 5

现代浏览器上,您可以使用它Array.from来获取键/值对的列表,或Object.fromEntries将其转换FormData为标准对象。

const formData = new FormData();

formData.append("question", "Life, Universe, Everything")
formData.append("answer", 42);
formData.append("isItTrue", false);

// An array of [key, value] pairs.
const pairs = Array.from(formData);

// An object with { key: values }.
const obj = Object.fromEntries(formData);

console.log(pairs);
console.log(obj);
Run Code Online (Sandbox Code Playgroud)

来自 MDN:

该方法从类似数组或可迭代对象Array.from()创建一个新的浅复制实例。Array

静态Object.fromEntries()方法将键值对列表转换为对象。

然而,对于旧版浏览器(没有填充),您必须手动解压迭代器:

var formData = new FormData(document.forms[0])
var formArray = [];

formData.forEach(function(value) {
  formArray.push(value);
});

console.log(formArray);
Run Code Online (Sandbox Code Playgroud)
<form>
  <input name="foo" value="5">
  <input name="bar" value="42">
</form>
Run Code Online (Sandbox Code Playgroud)

如果您想保存名称-值对,您应该迭代表单:

var form = document.forms[0];
var formArray = [];

for (var i = 0; i < form.length; i += 1) {
  formArray.push({ name: form[i].name, value: form[i].value });
}

console.log(formArray);
Run Code Online (Sandbox Code Playgroud)
<form>
  <input name="foo" value="5">
  <input name="bar" value="42">
</form>
Run Code Online (Sandbox Code Playgroud)