как получить обьект тестирования после работы опросника

у меня есть задача сделать опросник из исходного обьекта с вопросами.

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 шт):

Автор решения: SwaD
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);

Нужное вам форматирование вывода уже самостоятельно организуйте

→ Ссылка