Vidro3
Vidro3

Reputation: 234

compare nested object values

I have an object like so:

answers = {
   "q1" :  {
        "selected": "a",
        "correct": "b"
        },
   "q2": {
        "selected": "c",
        "correct": "d"
       },
    etc...
}

how do I compare selected and correct?

i'm trying

for (let key in answers) {
    if (key.selected === key.correct) {
        correct++;
    } else {
        incorrect++;
    }
}

but it doesn't work. I keep getting all questions marked correct. Pretty sure I need to do something else to go down a level in the object but not sure how to do it.

if I do answers[key].selected === answers[key].correct all come out as incorrect

Upvotes: 0

Views: 253

Answers (3)

JYoThI
JYoThI

Reputation: 12085

you need to use it like this

answers = {
   "q1" :  {
        "selected": "a",
        "correct": "b"
        },
   "q2": {
        "selected": "c",
        "correct": "c"
       }

};
var correct=0;incorrect=0;
for (let key in answers) {
 
 if (answers[key].selected === answers[key].correct)
 {
   correct++;
 }
else
{
   incorrect++;
}
}
   console.log(correct);
   console.log(incorrect);

Upvotes: 0

Douglas Tyler Gordon
Douglas Tyler Gordon

Reputation: 569

You want:

for (let key in answers) {
  if (answers[key]["selected"] === answers[key]["correct"]) {
    correct++; 
  } else {
    incorrect++; 
  }
}

Upvotes: 0

Joseph
Joseph

Reputation: 119847

Well... you're comparing the keys and not the values, where selected and correct will be undefined for both cases thus correct. You probably meant:

if (answers[key].selected === answers[key].correct) {

Upvotes: 1

Related Questions