Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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排序项(不带jQuery)_Javascript_Jquery - Fatal编程技术网

JavaScript FormData排序项(不带jQuery)

JavaScript FormData排序项(不带jQuery),javascript,jquery,Javascript,Jquery,我有一些使用jQuery的代码,需要重新编写以使用本机JS,但我在其中一个部分遇到了问题,它所做的是: 获取表单数据 按字母顺序对键排序 循环遍历元素以基于表单创建新的项目数组 这就是jQuery的工作原理: let formData = $('#TheForm').serialize(); let formItems = formData.split("&"); formItems.sort(); for (const element of formItems)

我有一些使用jQuery的代码,需要重新编写以使用本机JS,但我在其中一个部分遇到了问题,它所做的是:

  • 获取表单数据
  • 按字母顺序对键排序
  • 循环遍历元素以基于表单创建新的项目数组
这就是jQuery的工作原理:

let formData = $('#TheForm').serialize();
let formItems = formData.split("&");
formItems.sort();
for (const element of formItems) {
  //Do stuff here
}
这是到目前为止我在原生JS中所做的还不起作用的事情:

var theForm = document.getElementById('TheForm');
let formData = new FormData(theForm);
let formItems = formData.entries();
//formItems.sort(); <-- Can't work out a way to do this
for (let [key, value] of formItems) {
  //Do stuff here
}
var theForm=document.getElementById('theForm');
设formData=新formData(表格);
让formItems=formData.entries();
//formItems.sort() 由于该函数返回一个迭代器,因此首先需要从中获取一个数组:

常量formItems=Array.from(formData.entries())
此时您有一个成对数组,每对都是一个元组,其中第一个元素表示“键”,第二个元素表示“值”。不过这很好,因为您现在有了一个可以调用函数的数组,正好可以接收一个比较器函数

const sortedItems=formItems.sort(
([leftKey],[rightKey])=>leftKey>rightKey?-1:1
)
sort函数正在接收一个,其中两个参数(正在比较的两个项目)是为了将每个参数的第一个值提取到一个变量中,每个参数都是一对,一个两个值的数组,这很好。

由于函数返回一个迭代器,您首先需要从中获取一个数组:

常量formItems=Array.from(formData.entries()) 此时您有一个成对数组,每对都是一个元组,其中第一个元素表示“键”,第二个元素表示“值”。不过这很好,因为您现在有了一个可以调用函数的数组,正好可以接收一个比较器函数

const sortedItems=formItems.sort(
([leftKey],[rightKey])=>leftKey>rightKey?-1:1
)

排序函数正在接收一个,其中两个参数(正在比较的两个项目)是为了将每个参数的第一个值提取到一个变量中,每个参数都是一对,一个两个值的数组,结果很好。

好奇-OP的问题提到按字母顺序排序条目,不是键。你可能是对的,我把“条目”解释为元组本身,所以我选择了键,但是如果“条目”表示实际值,然后他应该能够通过更改comparator函数来使用每对中的第二个条目来实现。此外-但我对jQuery不够熟悉,所以我可能是错的-通过查看原始代码,排序发生在
key=value
项的数组上,这是对由
&
分隔的字符串(查询字符串?)进行
.split
调用的结果,因此按键排序应该是正确的方法。是的-我们不知道。我更好奇的是,为什么在知道你将在一个循环中转换数据的情况下首先排序。非常感谢你的帮助@Gian。这看起来正好能满足我的需要。我编辑了我的原始问题,以澄清这是我需要排序的关键,以及我需要排序的原因。是的,jQuery代码最终输出
key1=value1&key2=value2…
。作为一个数组,上面的操作要容易得多,因为它保存了字符串操作。再次感谢。好奇-OP的问题提到按字母顺序排列条目,而不是键。你可能是对的,我将“条目”解释为元组本身,所以我选择键,但如果“条目”表示实际值,然后他应该能够通过更改comparator函数来使用每对中的第二个条目来实现。此外-但我对jQuery不够熟悉,所以我可能是错的-通过查看原始代码,排序发生在
key=value
项的数组上,这是对由
&
分隔的字符串(查询字符串?)进行
.split
调用的结果,因此按键排序应该是正确的方法。是的-我们不知道。我更好奇的是,为什么在知道你将在一个循环中转换数据的情况下首先排序。非常感谢你的帮助@Gian。这看起来正好能满足我的需要。我编辑了我的原始问题,以澄清这是我需要排序的关键,以及我需要排序的原因。是的,jQuery代码最终输出
key1=value1&key2=value2…
。作为一个数组,上面的操作要容易得多,因为它保存了字符串操作。再次感谢。