按数字项对2D数组排序

时间:2019-05-06 20:10:25

标签: javascript arrays sorting

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

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.

2 个答案:

答案 0 :(得分: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]

}

答案 1 :(得分:0)

您的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];
}