[英]How to search and push new array into recursive multidimensional array in javascript (tree like structure)?
I have a multi dimensional array like the following我有一个多维数组,如下所示
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: []
}
]
}
]
}
];
I am also provided with a path array ['C Drive', 'User'].我还提供了一个路径数组 ['C Drive', 'User']。
I want to create a function which would take the path and add a new object to the 'subfolders' of the give path like我想创建一个 function 它将采用路径并将新的 object 添加到给定路径的“子文件夹”中,例如
addChild(['C Drive', 'User'],{name: 'new_folder', subfolders: []}) should return 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: []
}
]
}
]
}
];
You can do that by implementing a recursive search.您可以通过实现递归搜索来做到这一点。
My snippet does this and iterates over the route
that's given.我的代码片段执行此操作并迭代给定的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.