Estoy tratando de resolver un problema que tengo en mi JS que está relacionado con el siguiente fragmento
const signatureOrder = role => { let order; switch (role) { case 'GUARDIAN': order = 2; break; case 'ASSENTEE': order = 3; break; case 'COUNTERSIGNEE': order = 4; break; default: order = 1; break; } return order; };Este método básicamente toma un rol que actualmente es 4: CONSENTIDO, TUTOR, ASENTADO, FAVORABLE.
El CONSENTIDO es siempre 1 y el orden es siempre como los números del 1 al 5.
Sin embargo, puede haber una situación en la que pueda tener funciones múltiples:
1 consented 2 guardians 2 assentee 1 countersigneeEsto será traducido por el método en el siguiente orden
1 consented 2 Guardian 2 Guardian 3 Assentee 3 Assentee 4 CountersigneeEsto no es muy correcto y la salida debe ser un incremento de los valores individuales pero manteniendo el orden fijo como se muestra a continuación:
1 Consented 2 Guardian 3 Guardian 4 Assentee 5 Assentee 6 Countersigneeentonces lo que pasa es que si ya tenemos un tutor el próximo tutor pasa a ser el anterior tutor + 1 pero queda siempre después del Consiente y antes del Asistido.
Las áreas de escenarios:
Me gustaría entender cómo resolver esto de la manera correcta.
Puede ordenar todos sus elementos en función de un orderArray . Luego, asigne el orden según el índice del elemento.
Basado en esta respuesta :
const orderArray = ['CONSENTEE', 'GUARDIAN', 'ASSENTEE', 'COUNTERSIGNEE'] const elements = ['CONSENTEE', 'ASSENTEE', 'GUARDIAN', 'COUNTERSIGNEE', 'ASSENTEE', 'GUARDIAN'] elements.sort(function(a, b){ return orderArray.indexOf(a) - orderArray.indexOf(b); }); const withOrder = elements.map((el, i) => { return {role: el, order: i+1} }) console.log(withOrder)Me parece que necesitas algo como esto:
const sortRoles = rolesArray => { const orderOfRole = { 'CONSENTED': 1, 'GUARDIAN': 2, 'ASSENTEE': 3, 'COUNTERSIGNEE': 4 } rolesArray.sort((role1, role2) => orderOfRole[role1] - orderOfRole[role2]) }donde, al final, el orden es solo el índice en la matriz ordenada, incrementado en 1:
roles = ['GUARDIAN', 'ASSENTEE', 'ASSENTEE', 'CONSENTED'] sortRoles(roles) roles.map((role, index) => console.log(`${index + 1}: ${role}`)) // 1: CONSENTED // 2: GUARDIAN // 3: ASSENTEE // 4: ASSENTEE Puede extender esto para tener un objeto para el rol, en lugar de una cadena. En ese caso, solo necesita extraer la cadena del objeto en la función de comparación de sort() y usarla como se indica arriba.