2013-10-17 115 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]); 
};