我有一个名为myarr的二维数组,有十几行和两列。其内容如下:
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)排序。我犯错的地方?谢谢。
答案 0 :(得分: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);