繁体   English   中英

如何在 javascript(树状结构)中搜索并将新数组推送到递归多维数组中?

[英]How to search and push new array into recursive multidimensional array in javascript (tree like structure)?

我有一个多维数组,如下所示

data = [
    {
      name: "C Drive",
      subfolders: [
          {
            name: "User",
            subfolders: [
              { name: 'local_user',
              subfolders: [
              ]}
            ]
          }
        ]
    },
    {
      name: "D",
      subfolders: [
        {
          name: "Games",
          subfolders: [
              {
                name: "User Files",
                subfolders: []
              },
              {
                name: "Users",
                subfolders: []
              }
            ]
        }
  ]
}
];

我还提供了一个路径数组 ['C Drive', 'User']。

我想创建一个 function 它将采用路径并将新的 object 添加到给定路径的“子文件夹”中,例如

addChild(['C Drive', 'User'],{name: 'new_folder', subfolders: []}) 应该返回

[
    {
      name: "C Drive",
      subfolders: [
          {
            name: "User",
            subfolders: [
              { name: 'local_user',
              subfolders: [
              ]},
                 { name: 'new_folder',
              subfolders: [
              ]}

            ]
          }
        ]
    },
    {
      name: "D",
      subfolders: [
        {
          name: "Games",
          subfolders: [
              {
                name: "User Files",
                subfolders: []
              },
              {
                name: "Users",
                subfolders: []
              }
            ]
        }
  ]
}
];

您可以通过实现递归搜索来做到这一点。

我的代码片段执行此操作并迭代给定的route

 data = [{ name: "C Drive", subfolders: [{ name: "User", subfolders: [{ name: 'local_user', subfolders: [] }] }] }, { name: "D", subfolders: [{ name: "Games", subfolders: [{ name: "User Files", subfolders: [] }, { name: "Users", subfolders: [] } ] }] } ]; function traverseTree(route, data) { const r = 0 const findParentNode = (folder, r) => { if (r < route.length - 1) { const f = folder.find(e => e.name === route[r]) r++ return findParentNode(f.subfolders, r) } else { return folder.find(e => e.name === route[r]) } } return findParentNode(data, r) } // I suggest to pass the data array in the function const addChild = (route, newNode, data) => { // you should check for the existence of the subfolders array return traverseTree(route, data).subfolders.push(newNode) } const route1 = ['C Drive', 'User'] const route2 = ['D', 'Games', 'Users'] addChild(route1, { name: 'new_folder', subfolders: [] }, data) console.log('first:', data) // after adding node to 'C Drive -> User' addChild(route2, { name: 'new_folder2', subfolders: [] }, data) console.log('second:', data) // after adding node to 'D -> Games -> Users'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM