[英]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.