2013-07-03 3 views
3

У меня так называемый 2D-массив, называемый myarr с дюжиной строк и 2 столбца. Его содержание заключается в следующем:Javascript: сортировать 2D-массив сначала по второй колонке 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 возрастанию (0 - 85), а затем на колонке 1 возрастанию (A - Z). Где я сделал ошибку? Спасибо.

+0

возможно дубликат [Javascript, как вы сортировать массив на несколько столбцов?] (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); 
+1

спасибо, человек, это работает так, как я хотел. Я попробовал какую-то комбинацию, но никогда не написал этот. Можете ли вы направить мой источник для лучшего понимания? –

+0

Да, вот так: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort –

+0

спасибо, я уверен, что это поможет мне лучше с массивами. –