2013-07-03 228 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

謝謝隊友,我相信它會幫助我更好地使用數組。 –

相關問題