Как мне написать этот алгоритм для поиска следующего вопроса в дереве вопросов? - PullRequest
0 голосов
/ 18 июня 2019

Я изо всех сил пытался написать правильный алгоритм для этого. Итак, у меня есть дерево вопросов, которое выглядит так:

[
  {
    question: "Question 1",
    answers: {
      "yes": [
        {
          question: "Question 1a",
          answers: ["A", "B"]
        }
      ],
      "no": null
    }
  },
  {
    question: "Question 2",
    answers: ["I agree"]
  }
]

И у меня есть responses объект, который может выглядеть примерно так:

[
  { question: "Question 1", answer: "yes" },
  { question: "Question 1a", answer: "B" },
]

Или это может быть так:

[
  { question: "Question 1", answer: "no" },
]

А теперь я пытаюсь написать код, чтобы выяснить, каким должен быть следующий вопрос. Оба приведенных выше примера объекта responses должны указывать на следующий вопрос: "Question 2".

Я хотел бы иметь функцию типа getNextQuestion(questions, responses), которая, как мы надеемся, вывела бы:

{
  question: "Question 2",
  answers: ["I agree"]
}

Я понял, как пройти вниз по дереву, но я не могу понять, как пройти вверх по дереву, когда это необходимо. Кто-нибудь готов помочь?

1 Ответ

0 голосов
/ 18 июня 2019

Хм, возможно я исправил это с помощью этого кода.Пока все работает хорошо.

getCurrentQuestion(questions, responses) {
  if (!responses.length || !questions.length) {
    return questions.length ? questions[0] : null
  }

  let response = responses.shift()
  let question

  do {
    question = questions.shift()
  } while (question.question !== response.question)

  let answer = question.answers[response.answer]

  return this.getCurrentQuestion(answer || questions, responses)
    || this.getCurrentQuestion(questions, responses)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...