2015-03-19 51 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