Javascript 递归地创建嵌套数组

Javascript 递归地创建嵌套数组,javascript,arrays,recursion,Javascript,Arrays,Recursion,关于如何递归创建一组嵌套数组/对象,有什么建议吗 我允许我的用户使用快速文本区域添加多个元素。它们将用星号表示子项。我有一个像这样的字符串,我想把它变成一个数组 level 1.1 level 1.2 * level 1.2.1 ** level 1.2.1.1 ** level 1.2.1.2 * level 1.2.2 这是我希望看到的结果: [ { name: "level 1.1" }, { name: "level 1.2",

关于如何递归创建一组嵌套数组/对象,有什么建议吗

我允许我的用户使用快速文本区域添加多个元素。它们将用星号表示子项。我有一个像这样的字符串,我想把它变成一个数组

level 1.1
level 1.2
* level 1.2.1
** level 1.2.1.1
** level 1.2.1.2
* level 1.2.2
这是我希望看到的结果:

[
    {
        name: "level 1.1"
    },
    {
        name: "level 1.2",
        nodes: [
            {
                name: "level 1.2.1",
                nodes: [
                    {
                        name: "level 1.2.1.1"
                    },
                    {
                        name: "level 1.2.1.2"
                    }
                ]
            },
            {
                name: "level 1.2.2"
            }
        ]
    }
]
挑战在于,我不知道节点的深度


如果您有任何建议,我们将不胜感激。

这是一种线性方法,没有递归

您可以计算星星数,并获取给定节点所需级别的信息

此方案使用数组作为最后插入的层的引用,并维护所需的对象结构

如果缺少某个级别,此解决方案不提供健全性检查

var数据=['level 1.1'、'level 1.2'、'*level 1.2.1'、'**level 1.2.1.1'、'**level 1.2.1.2'、'*level 1.2.2'],
结果=[],
级别=[{nodes:result}];
data.forEach(函数){
变量级别=(s.match(/^\*+(?=\slevel)/)| |[''])[0]。长度,
name=s.match(/[^*]+$/)[0].trim();
级别[级别]。节点=级别[级别]。节点| |[];
levels[level].nodes.push(levels[level+1]={name:name});
});
控制台日志(结果)

。作为控制台包装{最大高度:100%!重要;顶部:0;}
。。。你试过的是???家庭作业,哈!唤起了很久以前的恐怖记忆。现在的情况是,我给人们一个机会,通过一个文本区域一次创建多个项目,如果他们希望某个项目是嵌套项目,那么他们可以添加星号。所以输入数据是给定的。@Zagreus听起来像是会给用户错误留下很大空间的东西。我建议给你的用户一个构建嵌套结构的界面。那太好了,谢谢。如果我理解的话,你是在用正则表达式计算出有多少个*s。我会进行快速验证,以确保没有遗漏任何关卡,我应该可以继续。