Tengo un conjunto de estudiantes de dos sistemas de calificación diferentes.
Primer sistema de calificación Un sistema de calificación se define como calificaciones del 1 al 5, donde 3 y más significa que aprobó el curso.
Segundo sistema de calificaciones El otro sistema de calificaciones tiene las siguientes calificaciones A, A-, B, B-, C, C- donde A es la calificación más alta y C es la calificación más baja para aprobar.
La tarea Dada la siguiente matriz allStudents que representa a todos los estudiantes y sus calificaciones, intento construir una nueva matriz StudentsWhoPass que contenga a todos los estudiantes que aprobaron.
let allStudents = [ 'A', 'B-', 1, 4, 5, 2 ]
let estudiantesQuePasan = [];
LO QUE HE PROBADO
let allStudents = [ 'A', 'B-', 1, 4, 5, 2 ] let studentsWhoPass = []; for (let i = 0; i < allStudents.length; i++) { if (allStudents >= 'A' && allStudents > 3) { return studentsWhoPass.push(allStudents); } }Cualquier ayuda será apreciada.
Varios asuntos
return en el ciclo detendrá el ciclo. No se necesita en un bucle. Se necesita en un mapa o filtro y no se permite fuera de una función.
Necesita acceder al elemento con [i]
Tienes una mezcla de letras y dígitos. Necesitas tratarlos por separado.
"B..." es > "A..." así que necesitamos probar la cadena real
Aquí pruebo las letras con isNaN (no es un número)
Pasa todas las letras > C- y todos los números >= 3
const allStudents = [ 'A','A-','B-',1,4,5,2 ]; const getPassingStudents = () => allStudents .filter(student => { if (isNaN(student)) return "ABC".includes(student.slice(0,1)) && student != "C-"; return student > 3; }); console.log( getPassingStudents() ) let allStudents = [ 'A', 'B-', 1, 4, 5, 2 ] let studentsWhoPass = []; for (let i = 0; i < allStudents.length; i++) { if (allStudents[i] == 'A' || allStudents[i] == 'B' || allStudents[i] == 'C' || allStudents[i] == 'A-' || allStudents[i] == 'B-' || allStudents[i] > 3) { studentsWhoPass.push(allStudents[i]); } } console.log(studentsWhoPass);NOTA :-
studentsWhoPass.push(allStudents[i]);&& (y) estamos usando || (o) operador para que cada condición para cada elemento no tenga que ser verdadera, pero al menos una condición debería ser verdaderaCreo que esto resolverá tu problema, ¡Gracias!
Sugeriría crear un mapa de cada grado junto con su puntaje equivalente, luego es fácil filtrar a los estudiantes con un puntaje equivalente de 3 o superior usando Array.filter()
let allStudents = [ 'A', 'B-', 1, 4, 5, 2, 'C-' ] // One can customize as necessary.. let gradeMap = { 'A': 7, 'A-': 6, 'B': 5, 'B-': 4, 'C': 3, 'C-': 2}; const passingScore = 3; function studentPassed(input) { return (gradeMap[input] || input) >= passingScore; } let studentsWhoPass = allStudents.filter(studentPassed) console.log('Passing students:', studentsWhoPass) .as-console-wrapper { max-height: 100% !important; top: 0; }