2017-05-15 2 views
0

Ich habe ein Objekt wie folgt:vergleichen Objektwerte verschachtelt

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

Wie vergleiche ich ausgewählt und richtig?

ich versuche

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

, aber es funktioniert nicht. Ich bekomme alle Fragen korrekt markiert. Ich bin mir ziemlich sicher, dass ich etwas anderes machen muss, um eine Ebene im Objekt zu erreichen, aber nicht sicher, wie ich es machen soll.

wenn ich answers[key].selected === answers[key].correct alles tun, kommen als falsch

+1

wie 'Antworten [key] .selected' und' Antworten [key] .correct' vielleicht benutzen? –

+0

'key' ist eine Zeichenfolge des aktuellen Schlüssels. Bitte überprüfen Sie, wie 'for-in' funktioniert: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in –

+0

Mögliche Duplikate von [Iterieren über Objekte in Javascript] (http://stackoverflow.com/questions/8389148/iterating-over-objects-in-javascript) –

Antwort

1

Nun ... Sie die Schlüssel sind zu vergleichen und nicht die Werte, wo selected und correctundefined sein wird, beide Fälle sind also richtig. Sie haben wahrscheinlich gedacht:

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

Sollten wir dies beantworten oder als Duplikat schließen? Es gibt wahrscheinlich mindestens 10 Fragen über 'für (Schlüssel im Objekt)' –

+0

Dies führt dazu, dass alle meine Antworten als falsch erscheinen, obwohl ihre Werte im Antwortobjekt übereinstimmen. irgendwelche Ideen, wenn ich etwas anderes falsch gemacht habe? – Vidro3

+0

@ Vidro3: WRT 'Antworten [Schlüssel] .selected === Antworten [Schlüssel] .correct' Betrachten Sie Ihre Daten. In keinem der Objekte ist die '.selected' Eigenschaft die selbe wie die' .correct' Eigenschaft. Wir wissen nicht, was Sie wirklich brauchen, weil Sie noch keine komplette, aber minimale Demo mit einer Beschreibung des Verhaltens, das über das hinausgeht, was Sie gezeigt haben, gepostet haben. –

0

Sie wollen:

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

'answers.key.selected' wird nicht die gewünschte Eigenschaft geben, und Sie haben die Variable 'let' Deklaration für einige entfernt Grund. –

+0

@Squint, du hast Recht. Behoben. –

0

müssen Sie es wie diese

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);