【问题标题】:How to sort numbers in ag grid using comparator如何使用比较器对 ag 网格中的数字进行排序
【发布时间】:2020-07-22 21:09:13
【问题描述】:

我一直在努力解决数值排序问题。 它正确排序升序和正确降序。 如果它有 null 则表示排序不正确。 就像如果有 1,2,3,null 对于上升它就像 1,2,3,null.Here 我需要 null 在第一个位置。 对于 Descending,它类似于 3,2,1,null,这是正确的。

期望升序为 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;

                            }                        

【问题讨论】:

    标签: javascript sorting ag-grid columnsorting


    【解决方案1】:

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

    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 custom comparator

    【讨论】:

    • 感谢您的回复。但在这里它不会有帮助。我也想过将它存储到一个数组中并排序。这里数组变空了。如何将此值添加到数组中。
    • 你能添加调用函数nullsLastonSortNumber的代码吗?还建议删除未使用的方法参数node1, node2, isInverted并添加两个参数isNullsFirstcurrentSort
    • 我在 aggrid 列定义中使用了比较器。这是一个调用这种排序方法。这个 val1,val2 做得很好。
    • 是的,也试过了。排序有效,当值未定义或为空时我该怎么办。我被困在这里。排序效果很好,但是当涉及到升序时,null 并不是第一个出现的。在那种情况下我能做什么??
    • 嗨,我创建了一个简单的 plunker plnkr.co/edit/OEtsUvZshqU8T0ot,它展示了如何在 main.js 中实现自定义比较器(ageComparator)。空值在上升时是第一个(inverse = false),在下降时是最后一个(inverse = true)。
    猜你喜欢
    • 2020-09-28
    • 2022-01-20
    • 2018-11-25
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多