对包含 20 个变量的列表进行排序,然后选择前五个变量

Sort a list of 20 variables, and pick the top five

本文关键字:变量 选择 然后 五个 包含 列表 排序      更新时间:2023-09-26

这就是我的困境,我做了几天的研究,试图找出如何解决它。

问题:我有一个函数,可以使用js读取xml文件的行,然后将某些行(a1,a2,a3等)存储到变量/数组中。然后,我需要按值对它们进行排序,并选择前五个最大的数字,并使用它们的 id 从 xml 文件中选择其他信息。

例如,我有 a1、a4、a5、a6 和 a2 是这个文件的最大行(值因文件而异)。然后,我需要在选择这些变量的情况下,从 10 行中获取具有相似名称的数据并对它们执行数学方程(新行与第一行相同,只是末尾带有"a"或"b")。

我的理论解决方案:将 xml 中的行读取到一个数组中,然后将相应的行读取到另外两个数组中。然后,当我对第一个数组进行排序时,我可以获取前五个数组的单元格名称,并使用它来定义我使用其他两个数组中的哪些数组单元格来完成我的方程。

这是我的三个数组。

indSort[0] = Number($(this).find("n0").text());
indSort[1] = Number($(this).find("n1").text());
indSort[2] = Number($(this).find("n2").text());
indSort[3] = Number($(this).find("n3").text());
indSort[4] = Number($(this).find("n4").text());
indSort[5] = Number($(this).find("n5").text());
indSort[6] = Number($(this).find("n6").text());
indSort[7] = Number($(this).find("n7").text());
indSort[8] = Number($(this).find("n8").text());
indSort[9] = Number($(this).find("n9").text());
indSort[10] = Number($(this).find("n10").text());
indSort[11] = Number($(this).find("n11").text());
indSort[12] = Number($(this).find("n12").text());
indSort[13] = Number($(this).find("n13").text());
indSort[14] = Number($(this).find("n14").text());
indSort[15] = Number($(this).find("n15").text());
indSort[16] = Number($(this).find("n16").text());
indSort[17] = Number($(this).find("n17").text());
indSort[18] = Number($(this).find("n18").text());
indSort[19] = Number($(this).find("n19").text());
indSort[20] = Number($(this).find("n20").text());
indSorta[0] = Number($(this).find("n0a").text());
indSorta[1] = Number($(this).find("n1a").text());
indSorta[2] = Number($(this).find("n2a").text());
indSorta[3] = Number($(this).find("n3a").text());
indSorta[4] = Number($(this).find("n4a").text());
indSorta[5] = Number($(this).find("n5a").text());
indSorta[6] = Number($(this).find("n6a").text());
indSorta[7] = Number($(this).find("n7a").text());
indSorta[8] = Number($(this).find("n8a").text());
indSorta[9] = Number($(this).find("n9a").text());
indSorta[10] = Number($(this).find("n10a").text());
indSorta[11] = Number($(this).find("n11a").text());
indSorta[12] = Number($(this).find("n12a").text());
indSorta[13] = Number($(this).find("n13a").text());
indSorta[14] = Number($(this).find("n14a").text());
indSorta[15] = Number($(this).find("n15a").text());
indSorta[16] = Number($(this).find("n16a").text());
indSorta[17] = Number($(this).find("n17a").text());
indSorta[18] = Number($(this).find("n18a").text());
indSorta[19] = Number($(this).find("n19a").text());
indSorta[20] = Number($(this).find("n20a").text());
indSortb[0] = Number($(this).find("n0b").text());
indSortb[1] = Number($(this).find("n1b").text());
indSortb[2] = Number($(this).find("n2b").text());
indSortb[3] = Number($(this).find("n3b").text());
indSortb[4] = Number($(this).find("n4b").text());
indSortb[5] = Number($(this).find("n5b").text());
indSortb[6] = Number($(this).find("n6b").text());
indSortb[7] = Number($(this).find("n7b").text());
indSortb[8] = Number($(this).find("n8b").text());
indSortb[9] = Number($(this).find("n9b").text());
indSortb[10] = Number($(this).find("n10b").text());
indSortb[11] = Number($(this).find("n11b").text());
indSortb[12] = Number($(this).find("n12b").text());
indSortb[13] = Number($(this).find("n13b").text());
indSortb[14] = Number($(this).find("n14b").text());
indSortb[15] = Number($(this).find("n15b").text());
indSortb[16] = Number($(this).find("n16b").text());
indSortb[17] = Number($(this).find("n17b").text());
indSortb[18] = Number($(this).find("n18b").text());
indSortb[19] = Number($(this).find("n19b").text());
indSortb[20] = Number($(this).find("n20b").text());

任何帮助都会很棒!!!

编辑:我也愿意以不同的方式做事。例子真的会有所帮助。

您可以使用自定义比较函数进行.sort(),您可以在其中将行的某些值相互比较。然后只使用:

array.sort(customCompare).slice(0, 5);

一种对元素进行排序的优雅方式:

$(this).find("*").sort(function(a, b){
  return +b.innerHTML-a.innerHTML;
})

之后你可以使用 slice() 获取前 5 个元素