2013-07-03 185 views
3

我有称为myarr的十二行和二列的二维数组。其内容如下:Javascript:按照第二列desc排序二维数组,然后按第一列asc

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

可能重复http://stackoverflow.com/questions/2784230/javascript-how-do-you-sort-an-array- on-multiple-columns) – tuespetre

回答

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); 
[JavaScript中,你如何排序多个列的阵列?(的
+1

谢谢你,这个作品就是我想要的。我尝试了一些组合,但从来没有这样写过。你能否指导我的源代码来更好地理解它? –

+0

是的,像这样:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort –

+0

谢谢队友,我相信它会帮助我更好地使用数组。 –

相关问题