【问题标题】:Sorting 2D Array by numeric item按数字项对二维数组进行排序
【发布时间】:2019-05-07 04:14:52
【问题描述】:

我想使用第 5 列 (Pts) 对该数组进行排序。

var table=[
  ["teamA",6,2,0,2,6],
  ["teamB",6,1,1,2,4],
  ["teamC",6,2,1,1,7]];

这是一个包含 Pld、W、D、L 和 Pts 列的足球联赛表。我计划稍后添加目标差异。

我尝试了以下代码:

console.log(table.sort(compare));

function compare( a, b ) {
  if (table[a][5]<table[b][5]){
    return -1;
  }
  if (table[a][5]>table[b][5]){
    return 1;
  }
  return 0;
}

不幸的是,代码甚至没有运行。我得到错误 cannot read property '5' of undefined.

【问题讨论】:

标签: javascript arrays sorting


【解决方案1】:

您不需要对表进行索引。迭代通过将每一行传递给函数(不是行索引)来实现这一点,只需索引您想要的列。您可以使用- 代替if 来获得相同的效果:

var table = [
  ["teamA", 6, 2, 0, 2, 6],
  ["teamB", 6, 1, 1, 2, 4],
  ["teamC", 6, 2, 1, 1, 7]
];

console.log(table.sort(compare));

function compare(a, b) {
  return a[5] - b[5]

}

【讨论】:

    【解决方案2】:

    您的 compare 方法将接收数组中的实际对象,而不是这些对象的索引。因此,将您的比较方法重构为:

    function compare( a, b ) {
      if (a[5] < b[5]){
        return -1;
      }
      if (a[5]>n[5]){
        return 1;
      }
      return 0;
    }
    

    这可以进一步简化为:

    function compare( a, b ) {
      return a[5] - b[5];
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2013-08-17
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2018-06-02
      • 2021-02-03
      • 2020-08-14
      • 1970-01-01
      相关资源
      最近更新 更多