javascript - 遍历规范化数据的最佳方法是什么?
问题描述
我正在尝试遍历文件夹结构的一些规范化数据,但我的实现遇到了一些问题。
例如,我的数据看起来像这样:
dict: {
parent_folder: {files: [], folders: [folder1, folder2, folder3]},
folder1: {files: [file1], folders: [folder4, folder 5]},
folder2: {files: [file2], folders: []},
folder3: {files: [], folders: [folder6]},
folder4: {files: [file3, file4], folders: []},
folder5: {files: [file5], folders: []},
folder6: {files: [file6], folders: []}
}
基本上这看起来像这样:
Root
-Folder1/
-file1
-Folder4/
-file3
-file4
-Folder5/
-file5
-Folder2/
-file2
-Folder3/
-Folder6/
-file6
现在我想基本上遍历所有内容以打印每个文件的路径
Root/Folder1/file1
Root/Folder1/Folder4/file3
Root/Folder1/Folder4/file4
Root/Folder2/file2
Root/Folder3/Folder6/file6
我似乎想不出一种简单的方法来遍历这些标准化数据,但我将不胜感激!
解决方案
退后一步,考虑一个简单的函数,它接受其中一个对象并返回一个文件数组。这只是一个简单map()
的添加一些路径前缀的方法,例如:
obj.files.map(f => prefix+f)
因此,如果您编写一个针对特定对象执行此操作的函数,然后使用您几乎拥有所需的所有文件夹调用相同的函数。您只需要在向下移动树时更改前缀:
let dict= {
parent_folder: {files: [], folders: ['folder1', 'folder2', 'folder3']},
folder1: {files: ['file1'], folders: ['folder4', 'folder5']},
folder2: {files: ['file2'], folders: []},
folder3: {files: [], folders: ['folder6']},
folder4: {files: ['file3', 'file4'], folders: []},
folder5: {files: ['file5'], folders: []},
folder6: {files: ['file6'], folders: []}
}
function getFiles(obj, prefix="root/"){
let r = obj.files.map(f => prefix+f) // get this level's files
obj.folders.forEach(folder =>{ // for the folders call the same thing
r.push(...getFiles(dict[folder], prefix+folder+'/')) // alter the prefix as you go
})
return r
}
console.log(getFiles(dict.parent_folder)) // give it the parent to start
推荐阅读
- c# - 检查所有部件窗口功能是否启用并启用关闭 .Net Framework
- spring-boot - Weblogic 和 Spring Boot com.fasterxml.jackson.annotation.JsonFormat$Value.hasLenient()Z 方法不存在
- asp.net - .NET 用户缺少 IIS 10.0
- c# - 格式化从表 C# 中选择的值
- bash - gpg — 仅将内容直接解密到 stout
- python - ExtraTreesRegressor 标准
- css - 为什么我的 :checked 转换只适用于检查?
- javascript - 使用 django DeleteView 调用弹出删除模式
- swiftui - 为什么 SwiftUI 更新功能不起作用?
- maven - 为 Maven 项目配置 JFrog 工件存储库