2012-10-22 25 views
10

我想知道排序函數和d3中升序函數之間的區別。 我正在尋找一種方法來按照所選列的升序重新排列我的表中的數據。d3:排序和升序之間的區別

謝謝。

回答

16

Array.sort()將按字母順序按升序對值進行排序。 Array.sort(d3.ascending)將自然按升序對值進行排序。當您對數字列表進行排序時可以看到差異。

var a = [3,26,1,7]; 

console.log(a.sort()); 
// prints [1,26,3,7] 

console.log(a.sort(d3.ascending)); 
// prints [1,3,7,26] 

有關sort是如何工作的,請參閱https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort的附加信息。

+1

那麼爲什麼這個例子能夠使用sort()對數字進行排序呢? http://bl.ocks.org/3719724 –

+3

它沒有。他將自定義的比較器傳遞給'sort':'tr.sort(function(a,b){return(b [k]/b.Total) - (a [k]/a.Total);})'。匿名函數(a,b)是實際進行比較的自定義比較器。 d3.ascending只是'function(a,b)的簡寫{0} {0} {0} {0}返回a b? 1:0; }' – Bill

+0

感謝您的澄清! 另外,你能解釋爲什麼在這個例子中需要這個部分? 'var ages = d3.keys(states [0])。filter(function(key){ return key!=「State」&& key!=「Total」; });' –