[英]How to sort null values with pivot.js
我使用Pivot.js库在数据上创建数据透视图。 该库使用jquery.dataTables显示最终数据透视表。 不幸的是,Pivot.js在排序时存在空值问题。
当使用以下设置时,可以在github站点上轻松看到该错误:
筛选字段:恩格尔伍德
行标签字段: last_name
列标签字段: invoice_yyyy
摘要字段: billed_amount
然后,按“ 2010”列排序。 结果将如下所示。
似乎该列像一个字符串一样进行了排序,因为某些行(逻辑上)包含空值并用''填充。 排序适用于在每一行中包含一个值的完整列。 列2010不完整,$ 90.10!<$ 850.00
如何在不更改Pivot.js库中的代码的情况下避免该错误? 谢谢。
你要提供一组新的排序功能,数据表,然后添加一个aTypes
功能可自动分配相应的数据类型(如格式化数字) - http://datatables.net/release-datatables/examples/plug-ins /sorting_plugin.html
棘手的是,jquery_pivot.js(与pivot.js一起提供)将不间断的空格点(
)用作空值( https://github.com/rjackson/pivot.js/blob/master/jquery_pivot .js#L347 )。 我建议jquery_pivot.js只是一个建议的UI实现,您应该可以自由地为您的应用程序对其进行修改。 但是,如果您不想对其进行修改,则会留下两种潜在的不良行为:
如您所见,将列视为字母数字进行排序。 NULLS LAST
方法(即,它们始终出现在表的末尾,而不考虑升序/降序的排序顺序)。 我的解决方案远非最优雅,但以下是我的代码:
排序功能:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"formatted-num-pre": function ( a ) {
a = (a===' ') ? NaN : a.replace( /[^\d\-\.]/g, "" );
return parseFloat( a );
},
"formatted-num-asc": function ( a, b ) {
if(isNaN(a)) return 1;
if(isNaN(b)) return -1;
return a-b;
},
"formatted-num-desc": function ( a, b ) {
if(isNaN(a)) return 1;
if(isNaN(b)) return -1;
return b-a;
}});
类型检测:
jQuery.fn.dataTableExt.aTypes.unshift(
function (data) {
return (data.charAt(0)==='$'||data===' ')?'formatted-num':null;
});
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.