繁体   English   中英

Javascript:首先按第二列desc排序二维数组,然后按第一列asc排序

[英]Javascript: sort 2D array at first by second column desc, then by first column asc

我有一个叫做myarr的所谓2D数组,具有12行和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列asc(0-85),然后按第1列asc(A-Z)排序。 我哪里出错了? 谢谢。

更新/注释:这是针对您情况的紧凑紧凑排序功能,它还支持具有非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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM