排序由数值项二维数组(Sorting 2D Array by numeric item)

2019-10-29 13:20发布

我想使用排序5柱(PTS)该阵列。

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

这是与场次,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.

Answer 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] } 



Answer 2:

您的比较方法的阵列,而不是内收到实际的对象,这些对象的索引。 因此,重构你的比较方法是:

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


文章来源: Sorting 2D Array by numeric item