0

我正在做一个有角度的项目,我正在制作一个文件夹结构。我将数据作为嵌套对象的数组插入。我正在使用一个存储我们单击的文件夹名称的数组和一个存储文件夹索引的另一个数组。例子 -

[{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];
     }

现在文件夹变量正在覆盖,那么我该如何解决这个问题。

4

1 回答 1

0

您可以像这样定义递归函数。

它包含一个目录结构数组,如您的数组、目标文件夹名称和要添加到目标文件夹中的文件夹名称。它递归搜索目标文件夹,如果找到它会将文件夹添加到目标文件夹中

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:[]}]}]}]

于 2020-02-23T18:11:08.670 回答