как получить обьект тестирования после работы опросника
у меня есть задача сделать опросник из исходного обьекта с вопросами.
const data = [{"What is your marital status?": ["Single", "Married"]}
{"Are you planning on getting married next year?": ["Yes", "No"]}
{"How long have you been married?": ["Less than a year", "More than a year"]}
{"Have you celebrated your one year anniversary?": ["Yes", "No"]}]
Вопросы в опроснике должны динамически определяться на основании ответов пользователя - следующий вопрос должен зависеть от ответа на предыдущий.
Я могу входящий обьект изменять и я его подстроил под свои логически как-бы правила и более понятно организовал.
как я сделал
let data = [{
id: 'id1',
question: 'What is your marital status?',
answer1: {
text: 'Single',
next_question: 'id2.1'
},
answer2: {
text: 'Married',
next_question: 'id2.2'
}
},
{
id: 'id2.1',
question: 'Are you planning on getting married next year?',
answer1: {
text: 'Yes',
next_question: 'id2.1.1'
},
answer2: {
text: 'No',
next_question: 'id2.1.2'
}
},
{
id: 'id2.2',
question: 'How long have you been married?',
answer1: {
text: 'Less than a year',
next_question: 'id2.2.1'
},
answer2: {
text: 'More than a year',
next_question: 'id2.2.2'
}
},
{
id: 'id2.2.2',
question: '"Have you celebrated your one year anniversary?',
answer1: {
text: 'Yes',
next_question: 'id2.2.2.1'
},
answer2: {
text: 'No',
next_question: 'id2.2.2.2'
}
}
];
Далее уже работаю с ним и преобразовал в еще легче структуру
const tree = {};
for (const o of data) {
tree[o.id] = [o.answer1.next_question, o.answer2.next_question];
}
Итог:
const tree = {
"id1" : [
"id2.1",
"id2.2"
],
"id2.1" : [
"id2.1.1",
"id2.1.2"
],
"id2.2" : [
"id2.2.1",
"id2.2.2"
],
"id2.2.2": [
"id2.2.2.1",
"id2.2.2.2"
]
};
Для теста рекурсивно перебрал все варианты ответа
const func = (q, h) => {
h.push(q);
for (const a of tree[q]) {
if (!tree[a]) {
console.log([...h, a]);
} else {
func(a, [...h]);
}
}
};
func(Object.keys(tree)[0], []);
И теперь чего же я хочу и что не получается
Мне нужно получить JSON обьект , являющийся результатом работы скрипта тестирования, с информацией о количестве всех возможных путей опросов (paths.number), и всеми возможными последовательностями вопросов с ответами (paths.list):
{paths: {number: 3, list: [
[{"What is your marital status?": "Single"},
{"Are you planning on getting married next year?": "Yes/No"}],
[{"What is your marital status?": "Married"},
{"How long have you been married?": "Less than a year"}],
[{"What is your marital status?": "Married"},
{"How long have you been married?": "More than a year"},
{"Have you celebrated your one year anniversary?": "Yes/No"}],
]}}
может я и не с этого начал или как довести до ума. Жду вашу помощь
Ответы (1 шт):
const responses = { // Закладываем логику поведения при ответах
0: [1, 2], // К какому вопросу идти
1: [false, false], // Выход если false
2: [false, 3],
3: [false, false],
}
let result = [];
// Для генерации случайных ответов
function rand() {
return (Math.random() >= 0.5) ? 0 : 1;
}
function getAnswer(askNum = 0, curAnsw = rand()) {
const quest = data[askNum];
for (let i in quest) {
result.push(`Question: ${i} Answer: ${quest[i][curAnsw]}.`)
}
if (responses[askNum][curAnsw]) {
getAnswer(responses[askNum][curAnsw], rand());
}
}
// Тестируем и складываем результаты запусков
const printResult = {}
for (let t = 0; t <= 5; t++) {
result = [];
getAnswer();
printResult[t] = [...result];
}
console.log(printResult);
Нужное вам форматирование вывода уже самостоятельно организуйте