Tengo una tabla de incidentes (consulte la matriz a continuación) y estoy tratando de ordenarlos por estado en el orden Inicial> En curso> En revisión> Resuelto. Luego, dentro del Estado organizado, quiero ordenarlos por Prioridad, de modo que P1>P2>P3 y luego organizar la prioridad por Fecha_de_inicio para que el más antiguo esté en la parte superior.
Parece que no puedo encontrar ningún ejemplo de tal granularidad de clasificación en línea. ¿Alguien sabría cómo voy a hacer esto?
Aquí está mi matriz:
$scope.Incidents= [{ Start_date: "2021-12-01 09:20:00" State: "Initial" Priority: "P1" },{ Start_date: "2021-11-01 07:20:00" State: "Ongoing" Priority: "P2" },{ Start_date: "2021-10-01 05:20:00" State: "Resolved" Priority: "P3" },{ Start_date: "2021-12-01 09:48:00" State: "Ongoing" Priority: "coach" },{ Start_date: "2021-11-20 06:55:00" State: "InReview" Priority: "P1" },{ Start_date: "2021-08-01 09:20:00" State: "InReview" Priority: "P2" }]; <div ng-repeat="incident in Incidents| orderBy:Custom_order > <div>{{incident.Priority}} - {{incident.Priority}} - {{incident.Start_date}}</div> </div>Aquí hay una idea de cómo escribir una función de clasificación que se puede adaptar fácilmente a otros problemas de clasificación de este tipo.
let sort_order = ["Initial", "Ongoing", "InReview", "Resolved"]; let sort_func = function(a, b){ return sort_order.indexOf(a.State) - sort_idx.indexOf(b.State); } $scope.Incidents.sort(sort_func); La secuencia dentro de sort_order definirá el orden. En caso de que desee invertir el orden, simplemente agregue .reverse() a .sort(...) .
El comentario de Petr me envió en la dirección correcta. Encontré una solución súper fácil que no he visto en ninguna parte aquí o en línea.
Esto es lo que agregué en mi ng-repeat:
<div ng-repeat="incident in Incidents| orderBy:[Custom_order_State,Custom_order_Priority, 'Start_date'] > <div>{{incident.State}} - {{incident.Priority}} - {{incident.Start_date}}</div> </div>En mi controlador, creé 2 funciones de orden personalizado así:
$scope.Custom_order_State= function (incident) { if(incident.State=== 'Initial'){ return 1; } if(incident.État === 'Ongoing'){ return 2; } if(incident.État === 'InReview'){ return 4; } if(incident.État === 'Resolved'){ return 5; } }; $scope.Custom_order_Priority= function (incident) { if(incident.Priority=== 'P1'){ return 1; } if(incident.Priority=== 'P2'){ return 2; } if(incident.Priority=== 'P3'){ return 3; } };Está funcionando perfectamente en mi extremo.