Я пытаюсь сгенерировать древовидную структуру в JavaScript из плоского массива.Обычно это было бы довольно простым предложением - просто сохраните массив «стек» со ссылками на объекты-предки текущей рабочей области, упорядоченные по глубине вложения - вставьте новый элемент в стек при входе на другой вложенный уровень и вытолкните его при выходеодин, заменив текущий рабочий элемент объектом, на который ссылается (новый) последний элемент массива.
К сожалению, для этого требуется возможность передачи по ссылке, чего нет в JavaScript (ну, нетЯ знаю, каким образом я могу использовать эту проблему.)
Чтобы дать немного фона, я пытаюсь превратить произвольно длинную / сложную строку, содержащую вложенный XML-стиль (но не XML, поэтому вместо него нельзя использовать синтаксический анализатор XML) Маркеры в структуру, аналогичную приведенной ниже:
Ожидаемый ввод:
[
"<token>",
"<my non compliant token>",
"some text at this level",
"<some other token>",
"some more text",
"<yet another token>",
"more text",
"</yet another token>",
"blah!",
"</some other token>",
"</token>",
"more text"
]
Ожидаемый результат
[
{
"token": "<token>",
"children": [
{
"token": "<my non compliant token>",
"children": [
"some text at this level",
{
"token": "<some other token>",
"children": [
"some more text",
{
"token": "<yet another token>",
"children": [ "more text" ]
},
"blah!"
]
}
]
}
]
},
"more text"
]
Чтобы уточнить - я не после всего алгоритма (но мне было бы интересно, если уВы хотите предоставить свою реализацию) - просто хороший метод для поддержания текущей позиции в выводимом дереве (или совершенно другой / лучший способ генерации объектов дерева!) Не слишком увлекайтесь тем, как работают токены - онине XML, и для целей упражнения можно было бы отформатировать его совершенно по-разному.
Любая информация будет принята с благодарностью!