2013-04-17 124 views
0

我有多个问题,其中包含子问题。我想存储一个数据结构,这样当用户选择第一个问题时,我可以选择子问题。此外,一些子问题使用该类别中的一般问题。最初我想过使用多维数组,但后来我意识到需要相当长的时间来搜索数组。数据结构的类型

任何建议表示赞赏。

谢谢

这是我迄今为止的解决方案。

//Key is the question and value(object) contains all the value related to the question 
categoryToSubquestions[2] = {"What type of countertop?":{ 
           "stone_slab_countertops": "Stone slab countertops", 
           "granite_countertops" : "Granite countertops", 
           "marble_countertops" : "Marble countertops", 
           "quartz_countertops" : "Quartz countertops", 
           "slate_countertops" : "Slate countertops", 
           "solid_surface_countertops" : "Solid Surface countertops", 
           "concrete_countertops" : "Concrete countertops", 
           "corian_countertops" : "Corian countertops", 
           "formica_countertops" : "Formica countertops", 
           "stainless_countertops" : "Stainless countertops", 
           "wood_or_butcher_block_countertops" : "Wood or Butcher block countertops", 
           "laminate_countertops" : "Laminate countertops", 
           "selectKey":"MappedCategory" 

          }, 
          "What best describes your countertop project?":{ 
           "install_or_replace": "Install or Replace", 
           "repair"  : "Repair", 
           "selectKey":"describe_countertop_project" 
          }, 
          "generalQuestions2": "4" 
          }; 
//This is general question that other categories might use...It is being used in the above category 
generalQuestion[4] = {"Is this project part of a larger remodel?":{ 
          "true" : "Yes", 
          "false": "No", 
          "selectKey":"part_of_larger_remodel" 
         } 
        }; 
//THIS IS categoryToSuquestion index to value assosciation...(JUST TO KEEP TRACK) 
var keyValue = new Array(
/*0*/   "cabinets_reface", 
/*1*/   "cabinets_refinish", 
/*2*/   "cabinets_countertop_install"); 

我现在有70个这个权利,我有点担心,如果它会减慢,一旦我不断增加更多的问题?

+3

听起来像一棵树给我。 – ChaosPandion

+2

它可能有助于提供您的数据结构的示例。我不确定你的意思是“一些小问题在这个范畴内使用一般问题”。 – showdev

+0

这一切都发生在客户端(JavaScript)或者你是否在服务器端从数据库中进行任何操作? –

回答

0

我会创建一个像这样的数据结构。
不要忘记,你可以像它的属性上的Hashtable/Dictionary一样访问它。

var questions_data_structure = { 
    "Q1": { 
     "question_text": "Parent Question #1?", 
     "sub_questions": ["SubQues1", "SubQues3"] 
    }, 
    "SubQues1": { 
     "question_text": "Sub Question 1?", 
     "parent_question": "Q1" 
    }, 
    "SubQues3": { 
     "question_text": "Sub Question 3?", 
     "parent_question": "Q1" 
    }, 
    "Ques8": { 
     "question_text": "Regular question without children questions?" 
    } 
} 

q = questions_data_structure["Q1"]; 
alert(q.question_text); 

if (q.sub_questions && q.sub_questions.length > 0) { 
    alert("I have child questions"); 

    var i = 0, len = q.sub_questions.length, childQuestionObj; 
    for (; i < len; i++) { 
     childQuestionObj = questions_data_structure[q.sub_questions[i]]; 
     alert(childQuestionObj.question_text); 
    } 
} 
else { 
    alert("I DON'T have child questions"); 
} 

所以,如果你配合你的数据结构的KEY值到HTML控件ID,你可以做这样的事情。

// include jQuery library 
$.each(questions_data_structure, function(question_id, value) { 
    if (value.sub_questions && value.sub_questions.length > 0) { 
     $('#' + question_id).click(function(e) { 
      /* Show or hide your child question controls */ 
     }); 
    } 
}); 
+0

我已经使用了相同的结构,但我想知道是否会减慢网站显着。目前我有70个问题,还有更多进来。 –

+0

DOM插入速度非常快(最多需要0.5秒才能在iPhone上插入10,000个DIV)。所以不要担心。这一切都取决于您的算法来处理您的数据结构。我写了更复杂的嵌套子节点和近200个或更多节点的数据结构,并没有遇到性能问题。 – stun