在不知道深度级别的情况下如何将数据作为对象插入嵌套对象数组中
How can I insert the data as object in array of nested object while I don't know it's depth level
我正在做一个 angular 的项目,我正在创建一个文件夹 structure.I 正在将数据作为嵌套数组插入 object.I 我正在使用一个存储文件夹名称的数组我们点击了另一个存储文件夹索引的数组。
示例 -
[{folder1:[{folder2:[{folder3:[]},{folder4:[]}]}]}];
如果我想在文件夹 3 中创建文件夹,则 -
array =[folder1,folder2,folder3]; index = [0,0,0]
我不知道它的深度,这就是我使用循环的原因-
for(i=0;i<array.length;i++) {
folder = folder[0][arr[i];
}
现在文件夹变量被覆盖,我该如何解决这个问题。
你可以像这样定义一个递归函数。
它接受一个像你的数组一样的目录结构数组,targetFolder 名称和你想添加到目标文件夹中的文件夹的名称。它递归搜索目标文件夹,如果找到它会将文件夹添加到目标文件夹
function addFolder(directory, targetFolder, folderName) {
if (directory && directory.length) {
directory.forEach(dir => {
if (dir[targetFolder]) {
dir[targetFolder].push({
[folderName]: []
});
} else {
const innerDirs = Object.values(dir);
innerDirs.forEach(d => addFolder(d, targetFolder, folderName))
}
});
}
}
const directory = [{folder1:[{folder2:[{folder3:[]},{folder4:[]}]}]}];
// Adds folder5 into folder3
addFolder(directory, 'folder3', 'folder5'); // [{folder1:[{folder2:[{folder3:[{folder5: []}]},{folder4:[]}]}]}]
我正在做一个 angular 的项目,我正在创建一个文件夹 structure.I 正在将数据作为嵌套数组插入 object.I 我正在使用一个存储文件夹名称的数组我们点击了另一个存储文件夹索引的数组。 示例 -
[{folder1:[{folder2:[{folder3:[]},{folder4:[]}]}]}];
如果我想在文件夹 3 中创建文件夹,则 -
array =[folder1,folder2,folder3]; index = [0,0,0]
我不知道它的深度,这就是我使用循环的原因-
for(i=0;i<array.length;i++) {
folder = folder[0][arr[i];
}
现在文件夹变量被覆盖,我该如何解决这个问题。
你可以像这样定义一个递归函数。
它接受一个像你的数组一样的目录结构数组,targetFolder 名称和你想添加到目标文件夹中的文件夹的名称。它递归搜索目标文件夹,如果找到它会将文件夹添加到目标文件夹
function addFolder(directory, targetFolder, folderName) {
if (directory && directory.length) {
directory.forEach(dir => {
if (dir[targetFolder]) {
dir[targetFolder].push({
[folderName]: []
});
} else {
const innerDirs = Object.values(dir);
innerDirs.forEach(d => addFolder(d, targetFolder, folderName))
}
});
}
}
const directory = [{folder1:[{folder2:[{folder3:[]},{folder4:[]}]}]}];
// Adds folder5 into folder3
addFolder(directory, 'folder3', 'folder5'); // [{folder1:[{folder2:[{folder3:[{folder5: []}]},{folder4:[]}]}]}]