Javascript:首先按第二列降序排序2D数组,然后按第一列升序排序。

5

我有一个所谓的二维数组,名为myarr,它有数十行和2列。它的内容如下:

myarr[0][0]='John'
myarr[0][1]=48
myarr[1][0]='Ann'
myarr[1][1]=36
myarr[2][0]='Sean'
myarr[2][1]=18
...

我希望您能够将其按第二列先降序排序,然后按第一列升序排序,就像这样:

John 48
Ann 36
Bob 36
Carl 36
Sean 18
Dean 17 ..

通过使用JavaScript,我尝试了以下代码:

myarr.sort(function(a, b){
    a = a[1]+a[0];
    b = b[1]+b[0];
    return a == b ? 0 : (a > b ? 1 : -1)
})

但这种方式按列2升序排序(0-85),然后按列1升序排序(A-Z)。我在哪里犯了错误?谢谢。

可能是重复的问题:Javascript如何在多列上对数组进行排序? - tuespetre
1个回答

11

更新/注:这是一个非常紧凑的排序函数,适用于您的情况,并支持具有非ASCII字符的字符串。我认为这是对我的答案的“改进”,但代价是除了懂得内情的人外,不易理解:

myarr.sort(
  function(a,b) {
   return b[1]-a[1] || a[0].localeCompare(b[0]);
  }
);

原始建议答案:这个代码将接受您给出的(随机化)数据并按您所需的方式产生排序后的输出。

myarr = [
['Dean', 17],
['John', 48],
['Ann', 36],
['Sean', 18],
['Bob', 36],
['Carl', 36]
];

myarr.sort(
function(a,b) {
if (a[1] == b[1])
return a[0] < b[0] ? -1 : 1;
return a[1] < b[1] ? 1 : -1;
}
);

alert(myarr);

1
谢谢你,这个正好符合我的要求。我尝试了一些组合,但从来没有你写的这个。你能否指导我去哪里找更好的资料来理解它? - Ludus H
是的,就像这样:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - Joseph Myers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接