Estoy tratando de construir una prueba en JavaScript. Tengo un objeto con una pregunta, respuestas y la respuesta correcta. Puedo verificar si el usuario respondió la pregunta correctamente haciendo coincidir el índice de las respuestas con el índice de la respuesta correcta.
Sin embargo, cuando trato de usar varios objetos y trato de ejecutar este código, no funciona. ¿Cómo puedo hacer que esto funcione?
esto funciona:
let questions = { question: "How many sides does a square have?", answers: [4, 6, 8], correctAnswer: 0, category: "trueOrFalse" }; const iterator = questions.answers.keys(); for (const key of iterator) { if (key === questions.correctAnswer) { console.log(questions.question + ": " + questions.answers[key]); } }pero esto no funciona:
let questions = { question: "How many sides does a square have?", answers: [4, 6, 8], correctAnswer: 0 }, { question: "How many sides does a triangle have?", answers: [3, 6, 8], correctAnswer: 0 } ; const iterator = questions.answers.keys(); for (const key of iterator) { if (key === questions.correctAnswer) { console.log(questions.question + ": " + questions.answers[key]); } }Aquí está el enlace a mi repositorio: DC Quiz
El problema ocurre cuando trato de responder la pregunta 4. En mi código, puede ver que está defectuoso en el archivo main.js en la fila 206.
¡Gracias por cualquier ayuda! Miguel
como ya se indicó anteriormente, debe definir sus preguntas en una matriz. Me gusta:
const questions = [{ question: "How many sides does a triangle have?", answer: [3, 5, 7], correctAnswer: 0 }, { question: "some question?", answer: [1, 42, "another answer"], correctAnswer: 2 } ]Probablemente lo esté haciendo más difícil de lo necesario al usar .keys(), esta función de matriz devuelve un iterador con los números de índice en lugar de los valores reales, lea sobre esto aquí
Dado que está almacenando el índice de la respuesta correcta, puede resolver esto fácilmente recorriendo su matriz de preguntas y tratando con las respuestas de esta manera:
for (let q of questions) { console.log(q.question, ": ", answers[correctAnswer]) }Esto funciona ya que correctAnswer contiene la clave de índice para la respuesta correcta.
Debe definir sus preguntas como una matriz de objetos.
let questions = [ { question: "How many sides does a square have?", answers: [4, 6, 8], correctAnswer: 0 }, { question: "How many sides does a triangle have?", answers: [3, 6, 8], correctAnswer: 0 } ];también tiene que iterar a través de su matriz de preguntas. la primera pregunta esta en:
questions[0].questionPor cierto: su variable de preguntas debe ser una matriz. (como sus respuestas) intente lo siguiente:
let questions = [{ question: "How many sides does a square have?", answers: [4, 6, 8], correctAnswer: 0 }, { question: "How many sides does a triangle have?", answers: [3, 6, 8], correctAnswer: 0 } ; const iterator = questions.answers.keys(); for (const key of iterator) { if (key === questions.correctAnswer) { console.log(questions.question + ": " + questions.answers[key]); } }]Explicación:
La matriz de preguntas agrupa todos sus objetos de pregunta. Si desea hacer una pregunta específica, debe decirle a javascript qué objeto de pregunta es el que desea hacer.
¿Es la primera pregunta?:
question[0].questionque significa: "¿Cuántos lados tiene un cuadrado?"
o tal vez otro?