Tengo una función subjectTotal que devuelve el total de un sujeto CQ y MCQ, estoy tratando de calcular el porcentaje dentro de la función subjectTotal, ya tengo una función de porcentaje que devuelve el porcentaje y el punto de calificación.
Función SubjectTotal:
const value = { english_1st_CQ: 5, english_2nd_CQ: 10, math_1st_CQ: 15, math_1st_MCQ: 20, math_2nd_CQ: 25, math_2nd_MCQ: 30, }; const subjectTotal = Object.entries(value).reduce((result, [key, value]) => { const [subjectName, subjectPosition, suffix] = key.split('_') const fullSubjectName = `${subjectName}_${subjectPosition}` if(!result[fullSubjectName]) { result[fullSubjectName] = 0; } result[fullSubjectName] += value return result }, {}) console.log(subjectTotal)Calcule la función de porcentaje, también estoy calculando el punto de calificación dentro de la función
const subjectTotal = { english_1st: 5, english_2nd: 10, math_1st: 35, math_2nd: 55 } const calculatePercentage = (subTotal) => { if (subTotal === 0) return { percentage: 0, GP: 0 }; // console.log(subTotal); const percentage = (subTotal / 100) * 100 - 4; let GP; if (percentage >= 80) GP = 5; if (percentage >= 70 && percentage <= 79) GP = 4; if (percentage >= 60 && percentage <= 69) GP = 3.5; if (percentage >= 50 && percentage <= 59) GP = 3; if (percentage >= 40 && percentage <= 49) GP = 2; if (percentage >= 33 && percentage <= 39) GP = 1; if (percentage < 33) GP = 0; return { percentage, GP }; }; const math_percentage = calculatePercentage(subjectTotal.math_1st + subjectTotal.math_2nd); const english_percentage= calculatePercentage(subjectTotal.english_2nd + subjectTotal.english_1st); console.log(math_percentage, english_percentage)No quiero llamar a la función una y otra vez, de esta manera, porcentaje_matemático , porcentaje_inglés . así que estoy tratando de llamar al porcentaje de cálculo dentro del total del sujeto y el total del sujeto devolverá el total del sujeto también el porcentaje
No tengo un ejemplo, solo quiero calcular el porcentaje dentro del subtotal.
Esto es lo que necesita
const value = { english_1st_CQ: 5, english_2nd_CQ: 10, math_1st_CQ: 15, math_1st_MCQ: 20, math_2nd_CQ: 25, math_2nd_MCQ: 30, }; const calculatePercentage = (subTotal) => { if (subTotal === 0) return { percentage: 0, GP: 0 }; const percentage = (subTotal / 100) * 100 - 4; let GP; if (percentage >= 80) GP = 5; if (percentage >= 70 && percentage <= 79) GP = 4; if (percentage >= 60 && percentage <= 69) GP = 3.5; if (percentage >= 50 && percentage <= 59) GP = 3; if (percentage >= 40 && percentage <= 49) GP = 2; if (percentage >= 33 && percentage <= 39) GP = 1; if (percentage < 33) GP = 0; return { percentage, GP }; }; const subjectTotal = Object.entries(value).reduce((result, [key, value], currentIndex, array) => { const [subjectName, subjectPosition, suffix] = key.split('_') const fullSubjectName = `${subjectName}_${subjectPosition}` if(!result[fullSubjectName]) { result[fullSubjectName] = 0; } result[fullSubjectName] += value; if (currentIndex + 1 === array.length){ result.math_percentage = calculatePercentage(result.math_1st + result.math_2nd); result.english_percentage= calculatePercentage(result.english_2nd + result.english_1st); } return result }, {}) console.log(subjectTotal); En el código anterior, uso el porcentaje de calculatePercentage solo en la última iteración de reducir para el último elemento donde todos los elementos de la matriz que ha proporcionado ya se reducen al resultado que desea. Luego adjuntamos al resultado los porcentajes de acuerdo a los valores ya finales calculados que contiene.
Además, como puede ver en la firma reduce((result, [key, value], currentIndex, array) reduce permite como parámetro el índice actual que mostrará a qué iteración se aplica el método de reducción, y también la matriz que se proporcionó como entrada ser reducido