按两个项目对一维数组进行排序

时间:2019-07-23 19:11:19

标签: javascript arrays sorting

我正在尝试按Pts,然后按GD对足球联赛表进行排序。

var league2=[
  "Team,P,W,D,L,GD,Pts",
  "teamA,6,2,0,2,4,6",
  "teamB,6,1,1,6,2,7",
  "teamC,6,2,1,8,8,7"
  ]; 

使用此代码:

console.log(league2.sort((a, b) => b[5] - a[5] || b[4] - a[4]));

这是基于我在这里收到的基于该数组的稍有不同版本的好建议而得出的:

var league1=[
  ["teamA",6,2,0,2,7],
  ["teamB",6,1,1,6,7],
  ["teamC",6,2,1,8,7]];

console.log(league1.sort((a, b) => b[5] - a[5] || b[4] - a[4]));

不幸的是,这导致联赛未排序。

我开始怀疑eague2不再是数组而是字符串列表了吗?如果是这样,是否还有另一种对League2进行排序的方法?

PS我更改League2的原因是要在HTML表格中显示它,但我可能需要回到绘图板...

预先感谢您的任何建议。

4 个答案:

答案 0 :(得分:1)

再次将每个元素转换为数组:

var league2=[
  "Team,P,W,D,L,GD,Pts",
  "teamA,6,2,0,2,4,6",
  "teamB,6,1,1,6,2,7",
  "teamC,6,2,1,8,8,7"
  ]; 

console.log(league2.map(x => x.split(',')).sort((a, b) => b[5] - a[5] || b[4] - a[4]));

答案 1 :(得分:1)

您可以先检查这些值是否为有限值,并在顶部获取非有限值。然后按所需的列排序。

var league2 = ["Team,P,W,D,L,GD,Pts", "teamA,6,2,0,2,4,6", "teamB,6,1,1,6,2,7", "teamC,6,2,1,8,8,7"];

league2.sort((a, b) => {
    var aa = a.split(','),
        bb = b.split(',');
    return isFinite(aa[5]) - isFinite(bb[5]) || bb[5] - aa[5] || bb[4] - aa[4];
}); 

console.log(league2);

答案 2 :(得分:0)

您可以创建一个具有相同大小的新的空数组,并将该字符串末尾的索引的整数表示形式放入其中的最后一个逗号。然后,您可以对列表进行排序以查找最大的整数,该整数在该数组中的位置的索引与具有最高分的团队的索引相同。通过比较整数对联赛2进行排序

答案 3 :(得分:0)

您的问题是,您的专栏未在League2中分开。一切都在1个字符串中。您可以使用拆分解决此问题,尽管效率不高

var league2=[
  "Team,P,W,D,L,GD,Pts",
  "teamA,6,2,0,2,4,6",
  "teamB,6,1,1,6,2,7",
  "teamC,6,2,1,8,8,7"
  ]; 

console.log(league2.sort(function(a,b) {a = a.split(","); b = b.split(","); return b[5] - a[5] || b[4] - a[4] }) );