Как я могу вставить данные в виде объекта в массив вложенного объекта, пока я не знаю его уровень глубины - PullRequest
0 голосов
/ 23 февраля 2020

Я работаю над проектом angular, где я делаю структуру папок. Я вставляю данные в виде массива вложенного объекта. Я использую массив, в котором хранится имя папки, по которой мы щелкнули, и другой массив, в котором хранится Индекс папки. пример -

[{folder1:[{folder2:[{folder3:[]},{folder4:[]}]}]}]; если я хочу создать папку в папке 3, то -

array =[folder1,folder2,folder3]; index = [0,0,0]

Я не знаю, это глубина Вот почему я использую l oop -

 for(i=0;i<array.length;i++) {
       folder = folder[0][arr[i];
     }

, теперь переменная папки перезаписывается, тогда как я могу решить эту проблему.

1 Ответ

0 голосов
/ 23 февраля 2020

Вы можете определить рекурсивную функцию следующим образом.

Она принимает массив структуры каталогов, такой как ваш массив, имя 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:[]}]}]}]

...