【问题标题】:First row in D3 DataTable is sorted incorrectly - D3/DC/CrossfilterD3 DataTable 中的第一行排序不正确 - D3/DC/Crossfilter
【发布时间】:2015-12-12 13:12:48
【问题描述】:

我有一些用于呈现数据表的基本 d3/dc/crossfilter 代码。数据表应按 N 列(即行号)排序。每当在浏览器中呈现表格时,一些随机行是顶行,然后在第二行中显示最高行,然后是适当的下一个最高行。我最初认为这个错误可能是由于 chrome 的排序不安全,但考虑到 N 列的所有值都是唯一的,这应该不是问题。

我的代码:

function makeGraphs(error, trades) {

     trades.forEach(function(d) {
         d['N'] = +d['N'] 
})  


var tradeTable = dc.dataTable("#dc-table-graph");

var trades = crossfilter(trades);

var NDimension = trades.dimension(function (d) {
    return d['N']});


tradeTable.width(960).height(800)
.dimension(NDimension)
.group(function(d) { return "trades"
})
.size(110)
.columns([
function(d) { return d.N; },
function(d) { return d['Profit']; },
])
.sortBy(function(d){ return -d.N; })
.order(d3.descending)
dc.renderAll();
 };

我的输出如下所示

N     Profit
54     .56
107    .36
106     .33
105     .25
104     .21
all the way down to N=1 

显然第一行不应该是 54,但由于某种原因它是。

有什么想法吗?

谢谢

【问题讨论】:

  • 这很奇怪。你能创建一个问题的工作示例吗? JSfiddle 或类似的网站很适合这个。
  • 尽管顶部有 forEach,但它们看起来仍按字符串排序。我想知道代码是否按照此处显示的顺序执行。
  • ^ 它是。奇怪的是它适用于 Internet Explorer,但不适用于 chrome

标签: javascript sorting d3.js dc.js crossfilter


【解决方案1】:

我为此构建了一个工作示例,但无法重现该问题:http://bl.ocks.org/esjewett/5d84984dd8436542bb33

请随时在http://blockbuilder.org/esjewett/5d84984dd8436542bb33 分叉块并尝试为我们重现问题。

我会注意到

trades.forEach(function(d) {
  d['N'] = +d['N'] 
})

在我看来,在排序方面没有做任何事情,因为在排序中它是 -d.N,无论如何它都会转换为一个数字。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多