У меня есть требование, когда мне нужно сортировать записи в порядке убывания поля типа DateTime в угловом JS, используемом в шаблоне vlocity. Если я пытаюсь отсортировать только по полю типа Date, то приведенный ниже код работает нормально, однако при изменении типа с Date на DateTime я получаю сообщение об ошибке: «Не удается прочитать свойство toLowerCase из undefined».

Фрагмент кода:

$scope.initializePagination = function(ctrl, ths) { var pagedItems = []; var reversedList = ctrl.vlcSI.recSet;// Здесь я получаю список записей

    reversedList = reversedList.sort(function (a, b) {
        let months = { jan: 1, feb: 2, mar: 3, apr: 4, may: 5, jun: 6, jul: 7, aug: 8, sep: 9, oct: 10, nov: 11, dec: 12 };
        var aa = a.adjustmentDateTime.trim().split(' ');
        var bb = b.adjustmentDateTime.trim().split(' ');
        return bb[2] - aa[2] || months[bb[1].toLowerCase()] - months[aa[1].toLowerCase()] || bb[0] - aa[0] ;
    }); 

    for (var i = 0; i < reversedList.length; i++) {
       if (i % $scope.itemsPerPage === 0) {
            pagedItems[Math.floor(i / $scope.itemsPerPage)] = [reversedList[i]];
        } else {
            pagedItems[Math.floor(i / $scope.itemsPerPage)].push(reversedList[i]);
        }
    }

    $scope.pagedItems = pagedItems;

}

Скриншот ошибки: введите здесь описание изображения

0
Gaurav Sharma 15 Окт 2020 в 14:39

1 ответ

Лучший ответ

Вы пытаетесь сделать свой собственный разбор. Не нужно. Просто вычтите даты напрямую:

reversedList = reversedList.sort(function (a, b) {
    return new Date(b || 0) - new Date(a || 0);
});
0
sfdcfox 15 Окт 2020 в 15:42
Большое спасибо, это сработало с небольшим обновлением: reversedList = reversedList.sort(function (a, b) { return new Date(b.DateTimeFieldName || 0) - new Date(a.DateTimeFieldName || 0); }) ;
 – 
Gaurav Sharma
16 Окт 2020 в 07:56