javascript - 使用自定义排序函数在 JavaScript 中对多维数组进行排序

标签 javascript arrays sorting

在 JavaScript 中对多维数组进行排序。仔细阅读了其他帖子,但无法弄清楚如何将数组成员传递给自定义排序函数,该函数确定是对字符串还是数字进行排序。 自定义排序函数是这样的:

function colSort(a, b) {
    if (sortDown) dValue = 1
    else dValue = -1;

    if (isNumeric(a[sortIndex])) {
        return (b[sortIndex] - a[sortIndex]) * dValue;
    } else {
        var astring = a[sortIndex].toLowerCase();
        var bstring = b[sortIndex].toLowerCase();
        if (bstring > astring) return -dValue;
        if (bstring < astring) return dValue;
        return 0;
    }
}

数组看起来像这样:

var qbStats =[

   ['David Lea', 'GB', 343, 502, 68.3, 4643, 9.2, 45, 6, 122.5],

   ['Kevin Whyte', 'NO', 440, 622, 70.7, 5087, 8.2, 41, 13, 108.4]

]

应该能够单击列出数组成员的 HTML 表格中的列标题,以对单击的列进行升序/降序排序。

我不知道如何指示要在点击的索引上排序的成员。

我知道它开始于:

qbStats.sort(colSort(a,b));

但我不知道如何传递要按特定索引排序的数组成员。例如:我如何告诉它按 'GB''NO' 排序为 'a''b'? 感谢您提供的任何帮助!

最佳答案

sort() 函数的比较回调由排序过程调用并传递数组元素对。您不必告诉任何要比较的元素;排序过程已经知道这一点。

在您的情况下,问题是您本质上需要每列一个排序函数。您可以通过创建一个返回另一个函数的函数来处理这个问题,该函数“知道”要比较哪一列:

function byColumn(sortIndex) {
  return function colSort(a, b) {
    if (sortDown) dValue = 1
    else dValue = -1;

    if (isNumeric(a[sortIndex])) {
      return (b[sortIndex] - a[sortIndex]) * dValue;
    } else {
      var astring = a[sortIndex].toLowerCase();
      var bstring = b[sortIndex].toLowerCase();
      if (bstring > astring) return -dValue;
      if (bstring < astring) return dValue;
      return 0;
    }
  };
}

然后:

qbStats.sort(byColumn(4)); // sort by column 4

byColumn() 函数只是比较器函数的简单包装。当它被调用时,它返回排序过程将使用的实际函数。该函数可以访问在其创建时传入的 sortIndex 参数,因此它本质上“知道”如何比较两行。

关于javascript - 使用自定义排序函数在 JavaScript 中对多维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977280/

相关文章:

java - issuesMostOften(int[] a) - java

c - 测试二分查找的平均运行时间

MySQL 分组不遵守 ORDER BY

c - 如何理解插入排序中改变键值?

javascript - 在返回 false 的 mouseup 事件后悬停链接时,Chrome 将光标变为默认而不是指针

javascript - 如何使用 Flow 扩展 React Native 组件的 props?

java - 如何在 Java 中高效地编写大量/多个敌人的生成和碰撞检测代码

c# - .net 值类排序与 IComparable

javascript - 谷歌浏览器 Javascript 调试器

javascript - 使用复选框隐藏多个表单字段