Я мог бы писать сокращенные объекты, но тогда у меня будет тонна отступов других массивов и объектов внутри. Это для формы вопроса со многими ветвями новых наборов вопросов, основанных на последнем, который был рассмотрен. Любые предложения о том, как этот код должен быть разработан?Лучший способ создания множества ветвящихся массивов в JavaScript
ответ
Используйте древовидную структуру, как это:
var
n0 = {/*data*/},
n1 = {/*data*/},
...
n3234 = {/*data*/}
n0.children = [n1, n2, n3]
n1.children = [n11, n12, n13]
...
n3234.children = []
При повторном использовании поддеревьев, просто сделать это:
n2321 = n1234,
Избегайте циклов, как это:
n2222 = n2,
...
n1111.children = [n1]
Одна вещь, которую я не понимаю в вашем примере, состоит в том, что в ней перечислены дети, которые еще не определены. – VagueExplanation
@VagueExplanation исправлено, извините ;-) –
Другое решение с меньшим типирования :
var d = {
'': {/*data*/},
'1': {/*data*/},
'1.1': {/*data*/},
..
'3.2.3.4': {/*data*/}
}
for(var k in d){//init child array
d[k].children = []
}
for(var k in d){//build tree structure
if(k != ''){//skip root
var a = k.split('.')//hierarchy array
var i = a.pop()//remove my level
var parent = a.join('.')
if(parent in d){//parent exists
d[parent].children.push({i: +i, k: k})//to prevent holes
}
else {
console.log('pending subtree: ' + k)
}
}
}
for(var k in d){//transform child array
d[k].children = d[k].children
.sort(function(a, b){return a.i - b.i})//es6 (a, b)=>a.i-b.i
.map(function(x){return d[x.k]})//es6 x=>d[x.k]
}
//now the tree is in d['']
Ошибка в предотвращении дыр. (undefined не является объектом (оценка «d [родительский] .children.push»)). Что должно там быть? – VagueExplanation
Добавлена инициализация дочернего массива @VagueExplanation и исправлено присоединение. Это не проверенный код, вы должны его завершить самостоятельно ... –
Важно то, как данные изложены. Если все вопросы уникальны на основе предыдущего ответа, у вас нет слишком большого выбора, кроме того, что вы изначально предложили. Если некоторые вопросы приводят к тем же путям, вам понадобится более сложная структура данных, такая как ориентированный граф. Но Stack Overflow на самом деле не предназначен для мозгового штурма структур данных, он предназначен для решения строго определенных проблем. Посмотрите на ориентированные графики и построение графика. [Вот сообщение в диалоговом окне] (http://gamedev.stackexchange.com/questions/40519/how-do-dialog-trees-work), который в основном вы делаете. –