Estoy atascado con un problema.
Así que estoy haciendo este sistema de calificación de estudiantes. La forma en que funciona es que el sistema debería poder hacer coincidir la clave de respuesta con la respuesta de un estudiante. Las claves de respuesta se almacenan así:
const answerkeys = {math01: a, math02: b, math03 : d, ...}También hay un sistema de calificación en el que math01 vale 5 puntos y math 02 vale 10 puntos, etc. Por confusión, guardé los datos en otro conjunto de recopilación de datos de la siguiente manera:
const scoring = {math01: 5, math02: 10, math03: 5, ...}Y luego las respuestas de los estudiantes se almacenan así:
const answers = {0: {math01: a, math02: c, ... } 1: {math01: b, math02: a, ... } 2: {math01: a, math02: c, ... } ... }Al principio, lógicamente pensé que podía iterar las respuestas, luego el resultado individual se comparará con las claves de respuesta y las (coincidencias) devueltas se multiplicarán con la clave de respuesta y la puntuación.
Así que intenté hacerlo de esta manera:
const studentAnswers = answers.map((elem) => {return elem}); studentAnswer.filter(answer => answerkeys.includes(answer));pero me esta dando
"result.js:82 TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo 'filtro')"
¿Cómo comparar entre "claves de respuesta" y "respuestas" y luego calcular las puntuaciones usando "puntuación"?
No hay un map nativo para el objeto Object , pero sugiero que esto funcionará:
let allStudentsScores = {} for (var idx in answers) { let studentAnswer = answers[idx] let studentScore = 0 for(var key in studentAnswer) { if (studentAnswer[key]==answerkeys[key]) { studentScore += scoring[key] } } allStudentsScores[idx] = studentScore } la variable allStudentsScores contiene la puntuación de cada estudiante. Donde el idx <0, 1, 2, ...> representa a cada estudiante.
Esperanza responde a tu pregunta.