2013-04-17 2 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 Control, вы можете сделать что-то вроде этого.

// 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 секунды, чтобы вставить 10 000 DIV на iPhone). Так что не беспокойтесь об этом. Все зависит от вашего алгоритма обработки вашей структуры данных. Я написал гораздо более сложные структуры данных с вложенными дочерними узлами и почти 200 или более узлами и не столкнулся с проблемой производительности. – stun

Смежные вопросы