I have a questionnaire which shows questions in prompt
. Each subsequent question depends on the user's answer. Now each question has two answers and a question ID to show next. And the code shows the question depending on the answer.
But not every question will have two possible answers. How can I show answer options in prompt depending on the presence of answer_2
. For example, if there is answer_2
, then:
const answer = prompt(`${question}`, `${answer_1.text} / ${answer_2.text}`)
If answer_2
is missing then:
const answer = prompt(`${question}`, `${answer_1.text}`)
Here my code:
const questions = [{
id: "1",
question: "q1",
answer_1: {
text: "a1",
next_question: "2",
},
answer_2: {
text: "a2",
next_question: "3",
},
},
{
id: "2",
question: "q2",
answer_1: {
text: "a1",
next_question: "",
},
},
{
id: "3",
question: "q3",
answer_1: {
text: "a1",
next_question: "",
},
answer_2: {
text: "a2",
next_question: "4",
},
},
{
id: "4",
question: "q4",
answer_1: {
text: "a1",
next_question: "",
},
},
];
//=== question display
function quiz({
question,
answer_1,
answer_2
}) {
const answer = prompt(`${question}`, `${answer_1.text} / ${answer_2.text}`);
let nextQuestion;
if (answer == answer_1.text) {
nextQuestion = answer_1.next_question;
} else if (answer == answer_2.text) {
nextQuestion = answer_2.next_question;
} else {
alert("Invalid answer");
}
if (nextQuestion) {
quiz(questions.find((q) => q.id == nextQuestion));
}
}
quiz(questions[0]);
CodePudding user response:
For questions with no answer_2
, you get undefined
as value for answer_2
in quiz
function. With that you can use an if (answer_2)
statement and output what you want, like so:
const questions = [
{
id: "1",
question: "q1",
answer_1: {
text: "a1",
next_question: "2"
},
answer_2: {
text: "a2",
next_question: "3"
}
},
{
id: "2",
question: "q2",
answer_1: {
text: "a1",
next_question: ""
}
},
{
id: "3",
question: "q3",
answer_1: {
text: "a1",
next_question: ""
},
answer_2: {
text: "a2",
next_question: "4"
}
},
{
id: "4",
question: "q4",
answer_1: {
text: "a1",
next_question: ""
}
}
];
//=== question display
function quiz({ question, answer_1, answer_2 }) {
let answer;
if (answer_2) {
answer = prompt(`${question}`, `${answer_1.text} / ${answer_2.text}`);
} else {
answer = prompt(`${question}`, `${answer_1.text}`);
}
let nextQuestion;
if (answer == answer_1.text) {
nextQuestion = answer_1.next_question;
} else if (answer_2 && answer == answer_2.text) {
nextQuestion = answer_2.next_question;
} else {
alert("Invalid answer");
}
if (nextQuestion) {
quiz(questions.find((q) => q.id == nextQuestion));
}
}
quiz(questions[0]);
CodePudding user response:
Since a number divided by one is that same number, 1 can be considered your default value.
const a1 = answer_1.text;
const a2 = answer_2?.text || 1;