javascript - 将路径数组转换为对象数组分组
问题描述
我确实找到了这个问题如何将路径数组转换为 JSON 结构?但是,我似乎无法操纵答案来实现我想要的。
我有一组路径,我想将其转换为可以在客户端上轻松使用的对象。
[
"\\Folder\file.xlsx",
"\\Folder\file2.xlsx",
"\\Folder\file3.docx",
"\\Folder\Folder2\file4.xlsx",
"\\Folder\Folder2\Folder3\file5.xlsx",
"\\Folder\Folder2\file6.xlsx",
"\\Folder\Folder4\file7.pdf"
"\\Folder\Folder4\Folder5\1. file8.pdf"
]
我试图得到一个看起来像这样的输出:
output = {
Folder: {
{
file: file.xlsx,
path: \\Folder\file.xlsx
},
{
file: file2.xlsx,
path: \\Folder\file2.xlsx
},
{
file: file3.xlsx,
path: \\Folder\file3.docx
}
Folder2: {
{
file: file4.xlsx,
path: \\Folder\Folder2\file4.xlsx
},
Folder3:{
{
file: file5.xlsx,
path: \\Folder\Folder2\Folder3\file5.xlsx
},
},
{
file: file6.docx,
path: \\Folder\Folder2\file6.xlsx
}
},
Folder4: {
{
file: file7.pdf,
path: \\Folder\Folder4\file7.pdf
},
Folder5: {
{
file: 1. file8.pdf,
path: \\Folder\Folder4\Folder5\1. file8.pdf
},
}
}
}
}
目前,我有这个给我空对象但没有路径:
var output = {};
var current;
for (var a = 0; a < files.length; a++) {
var s = files[a].split("\\");
// console.log("s ===> ", s);
current = output;
for (var i = 0; i < s.length; i++) {
if (s[i] != "") {
if (current[s[i]] == null) {
current[s[i]] = {};
} else {
current = current[s[i]];
}
}
}
}
但它并没有完全返回我正在寻找的东西。我不完全确定是否有像 map 或 reduce 这样的函数可以帮助解决这个问题,因为我对 Javascript 还是很陌生。
如果有人能指出我正确的方向,那就太好了。
解决方案
这是一个带有map
和的示例reduce
:)
请注意,您的预期输出无效,因此我对看起来最自然的内容进行了一些调整。
const files = [
"\\Folder\\file.xlsx",
"\\Folder\\file2.xlsx",
"\\Folder\\file3.docx",
"\\Folder\\Folder2.xlsx",
"\\Folder\\Folder2\\file4.xlsx",
"\\Folder\\Folder3\\file5.xlsx",
"\\Folder\\Folder3\\file6.docx",
"\\Folder\\Folder4\\file7.pdf"
];
const result = files.map(filePath =>
({
path: filePath,
file: filePath.substring(filePath.lastIndexOf('\\')+1)
})).reduce((acc, item) => {
const folderPath = item.path.substring(0, item.path.length-(item.file.length+1));
const folder = folderPath.substring(folderPath.lastIndexOf('\\')+1);
acc[folder] = acc[folder] || [];
acc[folder].push(item);
return acc;
}, {});
console.log(result);
这是一个小解释:
首先,将您的文件转换为预期的对象,然后使用!map
重新组织它们。reduce
你管这两个map
,reduce
它正在做这项工作!
推荐阅读
- postgresql - 复杂 postgres 查询的分页
- c# - 调试时 Visual Studio 2019 未启动控制台应用程序窗口
- angular - 角度反应形式,如何知道 valueChanges 是否由用户触发?
- android - 键盘上推显示
- python - 将所有关键字仅参数传递给其他函数
- android - 如何在 RecyclerView 适配器列表 Kotlin 中的适配器内实现警报对话框?
- java - BoxCars Java 程序 - 初学者。奇怪的问题:程序不在控制台中运行,但它在 Eclipse Java 中没有列出任何错误
- html - 添加html时div向下移动
- java - Java Swing - ScheduledExecutor 服务停止在用户输入上工作
- content-security-policy - 内容安全策略:页面的设置阻止了资源的加载 data:image/svg+xml;base64,PHN2ZyB3aWR0aD... (“default-src”)