首页 > 解决方案 > 如何使用比较器对 ag 网格中的数字进行排序

问题描述

我一直在尝试几个小时来解决数值排序的问题。它正确排序升序和正确降序。如果它有 null 它没有正确排序。就像如果有 1,2,3,null 用于上升它就像 1,2,3,null.Here 我需要 null 在第一个位置。对于降序,它就像 3,2,1,null 是正确的。

期待上升的空值,1,2,3,4。实际是 1,2,3,4,null

function nullsLastonSortNumber(val1, val2, node1, node2, isInverted) {

                            var isNullFirst = document.getElementById('{!$Component.pageId.oneValue}').innerHTML;


                            var currentSort= gridOptions.api.getSortModel();
                            if(isNullFirst=='false'){

                                if(currentSort[0].sort === 'asc'){

                                   if (val1 === null && val2 === null) {
                                    return 0;
                                     }
                                   if(val1 === null) {
                                    return -1;
                                    }

                                   if (val2 === null) {
                                    return 1;
                                     }
                                }
                                else if(currentSort[0].sort === 'desc'){
                                    if (val1 === null && val2 === null) 
                                    {
                                   return 0;
                                     }
                                    if (val1 === null) {
                                  return -1;
                                   }
                                  if (val2 === null) {
                                   return 1;
                                   }

                                }


                                return val1 - val2;

                            }                        

标签: javascriptsortingag-gridcolumnsorting

解决方案


如果您需要先使用空值进行升序排序,您可以执行以下操作:

var arr = [1,2,3,null];
arr.sort((a, b) => a-b);

这将导致[null, 1, 2, 3]

和下降:

arr.sort((a, b) => b-a);

这导致  [3, 2, 1, null]

因此,您可以将方法重写为:

function nullsLastonSortNumber(val1, val2, nodeA, nodeB, isInverted) {
     val1 = val1 || -Number.MAX_VALUE;
     val2 = val2 || -Number.MAX_VALUE;

     var currentSort = gridOptions.api.getSortModel();
     if(currentSort[0].sort === 'desc'){                
           return val2 - val1 
     }
     return val1 - val2;
}

ag-grid 自定义比较器


推荐阅读