簡體   English   中英

如何遍歷樹狀未知深度的嵌套數據結構以查找和收集可尋址數組項?

[英]How to traverse through a tree like nested data structure of unknown depth in order to find and collect addressable array items?

假設我有一個看起來像這樣的數組:

[{
  "name": "Audiograms",
  "folders": [{
    "name": "2022"
  }, {
    "name": "2021"
  }, {
    "name": "2020"
  }]
}, {
  "name": "Patient Paperwork"
}, {
  "name": "Repairs"
}]

而且這個數組可以有無限數量的對象和子對象,類似於文件樹。

我有一個數組讓我知道我需要從對象的根目錄訪問的文件夾的名稱,例如:

["Audiograms", "2022"]

我也不提前知道這個值,也不知道這個數組中有多少項目。

我如何能夠使用名稱數組實際遍歷此文件樹? 我希望做一些事情,比如將匹配的對象彈出並將其移動到文件樹的另一部分。

謝謝!

OP

“我希望做一些事情,比如將匹配的對象彈出並將其移動到文件樹的另一部分。”

為了實現上面提到的后續任務,下一個提供的解決方案遍歷OP 的文件夾結構,並為每個可尋址匹配收集兩個引用的對象targetparent ,其中前者是要找到的引用文件夾項,后者是其父文件夾項的引用。

該解決方案通過遞歸實現的reduce r 函數實現。

 function collectAddressableFolderRecursively(collector, folderItem) { const { name = null, folders = [] } = folderItem; const { address: [parentName, childName], result, } = collector; if (name === parentName && folders.length) { const targetFolder = folders .find(({ name }) => name === childName) ?? null; if (targetFolder !== null) { result.push({ target: targetFolder, parent: folderItem, }); } } result.push( ...folders.reduce(collectAddressableFolderRecursively, { address: [parentName, childName], result: [], }) .result ); return collector; } const folders = [{ name: 'Audiograms', folders: [{ name: '2022', folders: [{ name: 'Audiograms', folders: [{ name: '2022', }, { name: 'foo', }], }], }, { name: '2021', }, { name: '2020', }] }, { name: 'Patient Paperwork', }, { name: 'Repairs', folders: [{ name: 'Audiograms', folders: [{ name: '2022', }, { name: 'bar', }], }, { name: 'baz', }], }] const address = ['Audiograms', '2022']; const { result } = folders .reduce(collectAddressableFolderRecursively, { address, result: [], }); console.log({ address, result });
 .as-console-wrapper { min-height: 100%!important; top: 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM