Используйте угловой фильтр orderBy с массивом и функцией

Массив объектов, которые я хочу отсортировать, выглядит следующим образом:

var students = [
                {'name': 'AAA',
                'year': 'freshman',
                'score': 90,},

                {'name': 'ABA',
                'year': 'sophomore',
                'score': 100},
                ...
                ];

Пользовательская функция сортировки:

function customOrder(value) {
    switch(value){
        case 'freshman':
            return 0;
        case 'sophomore':
            return 1;
        case 'junior':
            return 2;
        case 'senior':
            return 3;
    }
}

И я использую фильтр Angular orderBy:

students = $filter('orderBy')(students, function(item) {
    return customOrder(item.year);
};

С помощью приведенного выше кода я могу отсортировать массив студентов по годам. Но я хочу отсортировать массив следующим образом: год: DESC, затем имя: ASC, затем оценка: DESC.

Я сделал массив для этого:

$scope.sortArray = ['name', '-score'];

И я изменил логику сортировки следующим образом:

students = $filter('orderBy')(students, [function(item) {
    return customOrder(item.year);
}, $scope.sortArray]); // I don't want to hard code here (i.e. 'name', '-score')

Но это дает ошибку.

Есть ли какой-нибудь возможный способ сортировки массива студентов?

0 ответов

Другие вопросы по тегам