Используйте угловой фильтр 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')
Но это дает ошибку.
Есть ли какой-нибудь возможный способ сортировки массива студентов?