Как отсортировать числа в сетке с помощью компаратора - PullRequest
0 голосов
/ 10 апреля 2020

Я часами пытался решить проблему с сортировкой значений чисел c. Это сортировка по возрастанию правильно и по убыванию правильно. Если он имеет значение NULL, он сортируется неправильно. Как если бы иметь 1,2,3, ноль для повышения по возрастанию, это похоже на 1,2,3, нуль. Для Descending это похоже на 3,2,1, ноль, который является правильным.

Ожидается восходящий нуль, 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;

                            }                        

1 Ответ

0 голосов
/ 10 апреля 2020

если вам нужно сначала отсортировать по возрастанию с нулями, вы можете сделать что-то вроде:

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

...