Javascript 如何对嵌套递归数组实现递归树算法

Javascript 如何对嵌套递归数组实现递归树算法,javascript,arrays,algorithm,recursion,data-structures,Javascript,Arrays,Algorithm,Recursion,Data Structures,有一个数组的灵感来自哈希树对象。但结构设计不好,有点复杂 const directories = [ "/main", [ "folder", ["subFolder", ["directory1", "directory2", "directory3"]], "folder2", ["subFolder", ["directory4", "directory5"]], "folder3", [ "subFolder",

有一个数组的灵感来自哈希树对象。但结构设计不好,有点复杂

const directories = [
  "/main",
  [
    "folder",
    ["subFolder", ["directory1", "directory2", "directory3"]],
    "folder2",
    ["subFolder", ["directory4", "directory5"]],
    "folder3",
    [
      "subFolder",
      ["directory4", "directory5", "directory6", "directory7"],
      "subFolderWrapper",
      ["folder1", ["subFolder", ["child1", "child2", "child3", "child4"]]]
    ]
  ]
]
必须创建递归函数,并根据给定函数的嵌套关系返回新数组

像这样的
const result = [
  "/main/",
  [
    "/main/folder",
    [
      "/main/folder/subFolder",
      [
        "/main/folder/subFolder/directory1",
        "/main/folder/subFolder/directory2",
        "/main/folder/subFolder/directory3"
      ]
    ],
    "/main/folder2",
    [
      "/main/folder2/subFolder",
      [
        "/main/folder2/subFolder/directory4",
        "/main/folder2/subFolder/directory5",
        "/main/folder2/subFolder/directory6",
        "/main/folder2/subFolder/directory7"
      ]
    ],
    "/main/folder3",
    [
      "/main/folder3/subFolder",
      [
        "/main/folder3/subFolder/directory4",
        "/main/folder3/subFolder/directory5",
        "/main/folder3/subFolder/directory6",
        "/main/folder3/subFolder/directory7"
      ],
      "/main/folder3/subs",
      [
        "/main/folder3/subFolderWrapper/folder1",
        [
          "/main/folder3/subs/folder1/subFolder",
          [
            "/main/folder3/subs/folder1/subFolder/directory1",
            "/main/folder3/subs/folder1/subFolder/directory2",
            "/main/folder3/subs/folder1/subFolder/directory3",
            "/main/folder3/subs/folder1/subFolder/directory4"
          ]
        ]
      ]
    ]
  ]
];
我在下面的函数中尝试了不同的逻辑,但这是一种我以前没有见过的不同的树实现。看来这是某种欺骗行为需要被应用。因为我知道有两种数组。其中一个是平面阵列,也称为一维阵列,另一个是二维阵列

function traverse(item) {
  for(let index in item){

    if (Array.isArray(item[index])) {
        // logic for creating nested array
        traverse(item[index]);
     }
     else {
         // logic for non array strings
     }
  }
} 
计算嵌套调用递归函数发生的时间。从项的当前索引中减去或添加到depthCounter变量,以便像BFS那样到达和访问下一个节点


我很好奇实现这个过程的最佳方法是什么。

您可以迭代数组,并将非数组作为路径,并将其存储到嵌套数组中

函数getArray(数组,路径=“”){ 无功温度; 返回array.map(v=>array.isArray(v) ?获取阵列(电压、温度) :(温度=路径+(路径和“/”)+v) ); } 常量目录=[“/main”、[“folder”、[“subFolder”、[“directory1”、“directory2”、“directory3”]、“folder2”、“subFolder”、[“directory4”、“directory5”]、[“directory4”、“directory5”、“directory6”、“directory7”]、“subFolderWrapper”、[“folder1”、“subFolder”、[“child1”、“child2”、“child3”、“child4”]; log(getArrays(directories))
。作为控制台包装{max height:100%!important;top:0;}
TBH,第一种结构似乎比第二种更好。为什么要到处重复父路径?。。。完全同意。实际上,我更喜欢这里的对象树,例如,
{name:“home”、childpath:[…],files:[…]}
。不幸的是,这是需要处理的结构。我知道在Javascript中构建树的正确方法是使用对象。这是一个可怕的结构,无法使用
[nr1name,nr1children,nr2name,nr2children,nr3name,nr4name,nr5name,nr5children,nr6name,…]
。我知道这是你得到的数据格式,但你真的必须使用它吗?是的。事实上,我正在用这个结构作为家庭作业。如果我在现实生活中收到类似的数据,我可能会抵制使用它。除非我坚持我的观点,从这个结构中创造出一棵新的干净的树,并且坚持下去。把这些可怕的数据留给死者吧。:)