2016-05-23 7 views
0

Ich versuche, einen Fragebogen zu entwickeln, bei dem Fragen von Antworten abhängig sind,
Was wird die richtige UI-Datenstruktur sein, um die Fragen und den Fragebogenfluss zu halten?Was wird eine korrekte Datenstruktur für den Fragebogen sein?

Sorry, wenn dies unklar ist, möchte einige Teile der Benutzeroberfläche auf der Grundlage der Antworten zu beseitigen, so brauche ich irgendeine Art von Datenstruktur in Java-Skript, so dass ich die HTML auf der Grundlage der Antworten dynamisch ändern kann, so ist die Frage wie man die Daten als JSON auf die Seite bringt und wie man sie in JS hält und einige Teile der UI auf Basis von JSON und Antworten eliminiert.

1 What is your name?_______ 
2 Did you ever code in java?___Y/N____ 
    3 <Question should appear only if answer is yes> How many years? ____ 
    4 <Question should appear only if answer is no> Did you ever code using any programming language? ____ 
5 Select occupation 
     a Developer 
     b Project manager 
6 <Question should appear only if answer to 5 is b> years experience in project management ________ 
+1

naheliegendste Antwort bewertet wird, wäre ein BST für jeden Baum bedingter Fragen sein. – Paul

+1

@Paul: Das wäre ein binärer Baum, kein binärer Suchbaum. –

+1

@JimMischel sry, hab die beiden durcheinander gebracht. Ich meinte Binärbaum – Paul

Antwort

9

Lassen Sie uns sagen, dass wir die folgenden Bedingungen nur haben:

  • Sie wollen genau jede Frage zu definieren, sobald
  • Eine Frage, auf jede Antwort von jeder verlassen können vorher gestellte Frage

Dann schlage ich die folgende generische Lösung vor:

// Each question has an id, a text and a condition depending on previous answers: 
 
var questions = [ 
 
    {id: "name", text: "What is your name?"}, 
 
    {id: "code-java", text: "Did you ever code in Java?"}, 
 
    {id: "code-java-years", text: "How many years?", condition: answers => answers["code-java"] == "yes"}, 
 
    {id: "code-other", text: "Did you ever code using any programming language?", condition: answers => answers["code-java"] == "no"}, 
 
    {id: "occupation", text: "Select occupation?"}, 
 
    {id: "experience-management-years", text: "Years experience in project management?", condition: answers => answers["occupation"] == "Project manager"} 
 
] 
 

 
// Ask all questions whose conditions evaluate to true and collect the answers: 
 
var answers = {}; 
 
questions.forEach(question => { 
 
    if (!question.condition || question.condition(answers)) { 
 
    answers[question.id] = prompt(question.text); 
 
    } 
 
}); 
 

 
console.log(answers);

Sie wahrscheinlich mehr Details zu einzelnen Fragen wie beispielsweise eine Validierungsfunktion, eine Art (boolean, Text, Auswahl, ...) usw.

Wenn Sie speichern müssen hinzufügen möchten und übertragen Sie Ihre Fragen im Klar JSON, müssen Sie Ihre Konditionsfunktionen mit einer Datenstruktur wie conditions: [{id: "code-java", operator: "equals", value: "yes"}] ersetzen, die durch

operators = { 
    'equals': (answer, value) => answer == value, 
    'regex': (answer, value) => new RegExp(value).test(answer), 
    ... 
} 

conditions.every(condition => operators[condition.operator](answers[condition.id], condition.value))