繁体   English   中英

Crossfilter + dc.js DataTable排序不正确

[英]Crossfilter + dc.js DataTable not sorting correctly

我正在将基本dc.js DataTable与我的CrossFilter数据一起使用,并尝试通过我的Value属性(它是一个数字)对它进行排序,但是我得到的数据是奇数排序。

这是显示问题的JSFiddle- http://jsfiddle.net/DonalRafferty83/97mwyp0u/4/

我将CrossFilter的尺寸设置如下:

var ndx = crossfilter(data);

var parseDate = d3.time.format("%d/%m/%Y").parse;

data.forEach(function(d) {
    d.date = parseDate(d.InDate);
    d.Value = parseFloat(d.Value).toFixed(2);
});

var dateDim = ndx.dimension(function(d) {return d.date;});
var typeDim = ndx.dimension(function(d) {return d.Type;});

然后,按如下所示创建DataTable:

var datatable   = dc.dataTable("#dc-data-table");
datatable
    .dimension(dateDim)
    .group(function(d) {return "";})
    .size(data.length)
    // dynamic columns creation using an array of closures
    .columns([
        function(d) { return d.Id; },
        function(d) {return d.Indate;},
        function(d) {return d.Type;},
        function(d) {return d.Category;},
        function(d) {return d.Value;}
    ]).sortBy(function(d) {
        return d.Value;
    })
    .order(d3.descending);

这是排序的结果,因为您可以在4000.46之前订购99,这是不正确的:

排序不正确

这是CrossDilter / dc.js的已知问题吗? 还是我做错了什么? 也许我需要操纵我的数据以使其以正确的方式工作?

.toFixed(2)返回一个字符串,因此您的sortBy函数正在对字符串进行排序。 因此,在“ 4000.46”之前订购“ 99”是正确的。 切换您的sortBy函数以return +d.Value; (+强制转换回数字)应该可以解决您的问题。

JSFiddle的固定版本: https ://jsfiddle.net/j9adz6bs/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM