Javascript 按两个数字项对二维数组排序

Javascript 按两个数字项对二维数组排序,javascript,arrays,sorting,columnsorting,Javascript,Arrays,Sorting,Columnsorting,我想先按第5列对2D数组排序,然后按第4列排序。他们在足球联赛中代表PTS和GD var table = [ ["teamA", 6, 2, 0, 2, 7], ["teamB", 6, 1, 1, 6, 7], ["teamC", 6, 2, 1, 8, 7] ]; 我采纳了在论坛上收到的建议: 我复制了这个函数,以便它首先按PTS排序,然后按GD排序 console.log(table.sort(comparePTS)); console.log(table.sort(co

我想先按第5列对2D数组排序,然后按第4列排序。他们在足球联赛中代表PTS和GD

var table = [
  ["teamA", 6, 2, 0, 2, 7],
  ["teamB", 6, 1, 1, 6, 7],
  ["teamC", 6, 2, 1, 8, 7]
];
我采纳了在论坛上收到的建议:

我复制了这个函数,以便它首先按PTS排序,然后按GD排序

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

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

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

}
function compareGD(a, b) {
  return b[4] - a[4]
}
虽然这样做有效,但它会将表格显示两次:

按临时秘书处排序

[ [ "teamA", 6, 2, 0, 2, 7 ], [ "teamB", 6, 1, 1, 6, 7 ], [ "teamC", 6, 2, 1, 8, 7 ] ]
按PTS和GD排序

[ [ "teamC", 6, 2, 1, 8, 7 ], [ "teamB", 6, 1, 1, 6, 7 ], [ "teamA", 6, 2, 0, 2, 7 ] ]

这似乎是最笨拙的解决方案。在单个功能中实现这一点的最佳方法是什么?提前感谢。

您可以链接订单函数,直到将此值返回到排序函数时出现差异

const
PTS=a=>a[5],
GD=a=>a[4],
ASC=fn=>(a,b)=>fn(a)-fn(b),
描述=fn=>(a,b)=>fn(b)-fn(a),
sortBy=fns=>(a,b)=>{
var值;
一些(fn=>value=fn(a,b));
返回值;
};
var表=[“teamA”,6,2,0,2,7],“teamB”,6,1,1,6,7],“teamC”,6,2,1,8,7];
表.排序(排序方式([DESC(PTS)、DESC(GD)]);
控制台日志(表)

.as console wrapper{max height:100%!important;top:0;}
您可以链接订单函数,直到将此值返回给排序函数时出现差异

const
PTS=a=>a[5],
GD=a=>a[4],
ASC=fn=>(a,b)=>fn(a)-fn(b),
描述=fn=>(a,b)=>fn(b)-fn(a),
sortBy=fns=>(a,b)=>{
var值;
一些(fn=>value=fn(a,b));
返回值;
};
var表=[“teamA”,6,2,0,2,7],“teamB”,6,1,1,6,7],“teamC”,6,2,1,8,7];
表.排序(排序方式([DESC(PTS)、DESC(GD)]);
控制台日志(表)

。作为控制台包装{最大高度:100%!重要;顶部:0;}
谢谢尼娜。我非常感谢你的答复。然而,第二个答案在早些时候发布,看起来更简单,但现在已被删除。它用“or”运算符修改了两种排序条件的原始比较函数-我想知道是否可以重新发布?主要部分是使用
第一次比较| |第二次比较
表。排序((a,b)=>b[5]-a[5]| b[4]-a[4])。非常感谢你,尼娜。我刚试过,效果不错!据我所知,is
table.sort((a,b)=>b[5]-a[5]| b[4]-a[4])只是你的代码的一个更简洁的版本,还是根本不同?它是我的一个硬编码版本。如果您有更多的排序需求,那么动态方法可能会更好。再次感谢。最后,如果硬编码版本是所谓的箭头函数,那么函数“table.sort”的名称是什么?只有我认为“table.sort”是一种内置方法?为所有的问题道歉。谢谢你,尼娜。我非常感谢你的答复。然而,第二个答案在早些时候发布,看起来更简单,但现在已被删除。它用“or”运算符修改了两种排序条件的原始比较函数-我想知道是否可以重新发布?主要部分是使用
第一次比较| |第二次比较
表。排序((a,b)=>b[5]-a[5]| b[4]-a[4])。非常感谢你,尼娜。我刚试过,效果不错!据我所知,is
table.sort((a,b)=>b[5]-a[5]| b[4]-a[4])只是你的代码的一个更简洁的版本,还是根本不同?它是我的一个硬编码版本。如果您有更多的排序需求,那么动态方法可能会更好。再次感谢。最后,如果硬编码版本是所谓的箭头函数,那么函数“table.sort”的名称是什么?只有我认为“table.sort”是一种内置方法?为所有的问题道歉。