我试图从一个平面数组中生成JavaScript树形结构。这通常是一个相当简单的命题 - 只需保留一个“堆栈”数组,其中包含按嵌套深度排序的当前工作范围祖先对象的引用,当进入另一个嵌套级别时将一个新元素推送到堆栈上,并在离开一个级别时将其弹出,用新的最后一个数组项引用的对象替换当前的工作元素。
不幸的是,这需要传递引用的能力,而JavaScript没有(好吧,没有以我知道如何在此问题上使用的任何有意义的方式)。
为了背景介绍一下,我正在尝试将一个任意长/复杂的字符串转换为类似于下面的结构的嵌套XML风格(但不是 XML,因此不能使用XML解析器)令牌: 预期输入:
为了澄清,我不需要整个算法(但如果您愿意提供您的实现,我会很感兴趣) - 我只需要一种在输出树中维护当前位置的好方法(或者是生成树对象的完全不同/更好的方式!)不要太关注令牌的工作方式 - 它们不是XML,并且对于这个练习的目的可以完全以不同的形式格式化。非常感谢任何输入!
不幸的是,这需要传递引用的能力,而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,并且对于这个练习的目的可以完全以不同的形式格式化。非常感谢任何输入!