簡體   English   中英

如何使用ivot.js對空值進行排序

[英]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一起提供)將不間斷的空格點( &nbsp; )用作空值( https://github.com/rjackson/pivot.js/blob/master/jquery_pivot .js#L347 )。 我建議jquery_pivot.js只是一個建議的UI實現,您應該可以自由地為您的應用程序對其進行修改。 但是,如果您不想對其進行修改,則會留下兩種潛在的不良行為:

  1. dataTables的自動類型檢測會跨越&nbsp; 如您所見,將列視為字母數字進行排序。
  2. 即使當您使用它來檢測數字排序時,空值通常也將被視為集合中的最小值或最大值。 在我的應用程序中,我更喜歡NULLS LAST方法(即,它們始終出現在表的末尾,而不考慮升序/降序的排序順序)。

我的解決方案遠非最優雅,但以下是我的代碼:

排序功能:

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "formatted-num-pre": function ( a ) {
        a = (a==='&nbsp;') ? 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==='&nbsp;')?'formatted-num':null; 
  });

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM