I'm stuck with a problem.
So i'm making this student grading system. The way it works is that the system should be able to match answer key with a student's answer. The answer keys are stored like this:
const answerkeys = {math01: a, math02: b, math03 : d, ...}
There is also a grading system where math01 is worth 5 points, and math 02 worth 10 points, etc. Out of confusion, i saved the data in another set of data collection as something like this:
const scoring = {math01: 5, math02: 10, math03: 5, ...}
And then the students' answers are stored like this:
const answers = {0: {math01: a, math02: c, ... }
1: {math01: b, math02: a, ... }
2: {math01: a, math02: c, ... }
...
}
At first, logically i thought i can iterate answers, then the individual result will be matched with answerkeys and the returned (matches) will then be multiplied with answerkeyandscore.
So i tried doing it this way:
const studentAnswers = answers.map((elem) => {return elem});
studentAnswer.filter(answer => answerkeys.includes(answer));
But it is giving me
"result.js:82 Uncaught TypeError: Cannot read properties of undefined (reading 'filter')"
How to compare between "answerkeys" and "answers" and then calculate the scores using "scoring"?
There is no native map to the Object object, but i suggest this will works:
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
}
the allStudentsScores variable contains each of student's score. Where the idx <0, 1, 2, ...> represents each student.
Hope answers your question.