2013-10-17 150 views
8
data = [[1062, 732, 1327754], [12335, 7693, 109313934], [290, 450, 1768064]]; 

哪能排序在我的數據造成的D3降序排序爲多維數組

[[12335, 7693, 109313934], [290, 450, 1768064], [1062, 732, 1327754]] 

降序排序值我試圖使用D3每個陣列對象的第三值方法: data.sort(d3.descending);

回答

18

您必須通過data.sort的比較函數,將每個陣列中訪問的第三個元素:

data.sort(function(a, b){ return d3.descending(a[2], b[2]); }) 

這裏因爲data是一個多維數組,所以ab也是數組。然後

d3.descending(a[2], b[2]) 

執行每個數組中第三個元素的比較,以便結果以降序返回。

+1

由於您使用的數字,它可能會更有意義只使用'function(a,b){return b [2] - a [2]; }而不是'd3.descending'返回的函數,儘管使用d3是一個非常好的,可以說是更可讀的解決方案。 – Wex

+0

好點@Wex。我使用了'd3.descending',因爲OP已明確要求它,並且因爲它可以更清晰地表示出來:) – mdml

+0

完美運作。多謝你們! – Tom

2

,如果你想在一個次要排序增加,因此如果第三列的值相等,你再排序在第二欄:

data.sort(function(a, b) { 
    if(a[2]===b[2]) { 
    return d3.descending(a[1], b[1]); 
    } 
    return d3.descending(a[2], b[2]); 
};