簡體   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