2015-03-19 63 views
2

我已經使用dc.js創建數據表,我的要求是按照多列的降序對數據表進行排序。我使用了以下代碼:dc.js按多列對數據表進行排序

.order(d3.descending) 
    .sortBy(function (d) { 
      return d.columnOne; 
      return d.columnTwo; 
}); 

請幫忙。

+0

你有什麼只會返回'd.columnOne'並忽略其餘。你是否在嘗試使用'd.columnTwo'作爲輔助排序鍵? – Gordon 2015-03-19 14:17:25

+0

是啊,戈登,我想排序多列數據表,列屬性是'd.columnOne'和'd.columnTwo'。 – ali 2015-03-20 05:31:34

回答

2

您傳遞給sortBy的函數需要返回一個按照字典順序或數字順序排列所需行順序的鍵。

當您試圖在那裏返回兩個值是不可能的。相反,

  1. 如果兩個列都是字符串加入值作爲字符串,由具有比在columnOne任何字符較低ASCII值的字符,或
  2. 分離如果兩個列是數字,由多個乘columnOne這比在columnTwo任何值,然後添加兩個 值

方法之一,字符串:

.order(d3.descending) 
    .sortBy(function (d) { 
      return [d.columnOne,d.columnTwo].join('\x0'); 
}); 

方法有兩個,爲數字

.order(d3.descending) 
    .sortBy(function (d) { 
      return d.columnOne * 1e9 + d.columnTwo; 
}); 

我提前道歉,如果有這個代碼的任何錯誤,因爲它是未經測試。

我不知道任何方式來做到這一點,如果一列是數字,另一列是字符串。

1

戈登的方法爲我工作,與未成年人調整

我的兩列分別爲一個字符串,一個數字,我用

.sortBy(function (d) { 
    return [d.columnOne,d.columnTwo].join(); 
}); 

該訣竅。謝謝戈登! :-)

+1

很高興我能幫到你。但是,請注意,您沒有對數字進行詞典排序而不是數字排序。例如。 「A,10」將字符串排序爲「A,2」。我認爲解決這個問題的唯一方法就是確保你的數字被填充到最大寬度,例如「A,10」,「A,02」。 – Gordon 2015-04-27 16:27:03

+0

對於這個問題,「10,A」將字符串排序爲比「2,A」低。 – Gordon 2015-04-30 01:41:36

+0

遲來的謝謝。你在現場。我意識到深夜到底發生了什麼,並且填充0會正確執行。再次感謝。 – 2015-07-22 13:19:22