Существует Массив, который вдохновлен объектом хэш-дерева.Но структура не очень хорошо спроектирована и немного сложна.
const directories = [
"/main",
[
"folder",
["subFolder", ["directory1", "directory2", "directory3"]],
"folder2",
["subFolder", ["directory4", "directory5"]],
"folder3",
[
"subFolder",
["directory4", "directory5", "directory6", "directory7"],
"subFolderWrapper",
["folder1", ["subFolder", ["child1", "child2", "child3", "child4"]]]
]
]
]
Необходимо создать рекурсивную функцию и вернуть новый массив на основе вложенных отношений из заданного.
что-то вроде этого
const result = [
"/main/",
[
"/main/folder",
[
"/main/folder/subFolder",
[
"/main/folder/subFolder/directory1",
"/main/folder/subFolder/directory2",
"/main/folder/subFolder/directory3"
]
],
"/main/folder2",
[
"/main/folder2/subFolder",
[
"/main/folder2/subFolder/directory4",
"/main/folder2/subFolder/directory5",
"/main/folder2/subFolder/directory6",
"/main/folder2/subFolder/directory7"
]
],
"/main/folder3",
[
"/main/folder3/subFolder",
[
"/main/folder3/subFolder/directory4",
"/main/folder3/subFolder/directory5",
"/main/folder3/subFolder/directory6",
"/main/folder3/subFolder/directory7"
],
"/main/folder3/subs",
[
"/main/folder3/subFolderWrapper/folder1",
[
"/main/folder3/subs/folder1/subFolder",
[
"/main/folder3/subs/folder1/subFolder/directory1",
"/main/folder3/subs/folder1/subFolder/directory2",
"/main/folder3/subs/folder1/subFolder/directory3",
"/main/folder3/subs/folder1/subFolder/directory4"
]
]
]
]
]
];
Я попробовал различные виды логики в этой функции ниже, но это была другая реализация дерева, которую я раньше не видел.Похоже, что некоторые виды обмана должны быть применены.Потому что есть два вида массивов, которые я знаю.Один из них плоский, также известный как одномерный, а другой - двумерный массив.
function traverse(item) {
for(let index in item){
if (Array.isArray(item[index])) {
// logic for creating nested array
traverse(item[index]);
}
else {
// logic for non array strings
}
}
}
Подсчитывает вложенный вызов, сколько раз происходит рекурсивная функция.Вычитается или добавляется в переменную глубиныCounter из текущего индекса элемента для достижения и посещения следующего узла, как это делал BFS.
Мне любопытно, как лучше всего добиться этого процесса.