javascript - 需要将文件路径数组转换为treeview json对象
问题描述
需要将文件路径数组转换为 Treeview JSON 对象
数组数据:
[path1/subpath1/file1.doc",
"path1/subpath1/file2.doc",
"path1/subpath2/file1.doc",
"path1/subpath2/file2.doc",
"path2/subpath1/file1.doc",
"path2/subpath1/file2.doc",
"path2/subpath2/file1.doc",
"path2/subpath2/file2.doc",
"path2/subpath2/additionalpath1/file1.doc"]
我想要下面的对象结果:
{
"title": "path1",
"childNodes" : [
{ "title":"subpath1", "childNodes":[{ "title":"file1.doc", "childNodes":[] }] },
{ "title":"subpath2", "childNodes":[{ "title":"file1.doc", "childNodes":[] }] }
]
}
我能够使用下面的代码片段将其转换为对象,但无法按照我想要的方式进行转换
let treePath = {};
let formattedData = {};
data.forEach(path => {
let levels = path.split("/");
let file = levels.pop();
let prevLevel = treePath;
let prevProp = levels.shift();
levels.forEach(prop => {
prevLevel[prevProp] = prevLevel[prevProp] || {};
prevLevel = prevLevel[prevProp];
prevProp = prop;
});
prevLevel[prevProp] = (prevLevel[prevProp] || []).concat([file]);
});
我怎样才能做到这一点????
解决方案
您可以减少路径的部分并搜索相同的标题。
const
pathes = ["path1/subpath1/file1.doc", "path1/subpath1/file2.doc", "path1/subpath2/file1.doc", "path1/subpath2/file2.doc", "path2/subpath1/file1.doc", "path2/subpath1/file2.doc", "path2/subpath2/file1.doc", "path2/subpath2/file2.doc", "path2/subpath2/additionalpath1/file1.doc"],
result = pathes.reduce((r, path) => {
path.split('/').reduce((childNodes, title) => {
let child = childNodes.find(n => n.title === title);
if (!child) childNodes.push(child = { title, childNodes: [] });
return child.childNodes;
}, r);
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - 从熊猫数据框列更新 slqalchemy orm 列的正确方法是什么
- swift - 当我在计算机上的文件夹中迭代文件时,为什么我的代码会失败?
- python - Python中fromhex格式的解释
- javascript - Javascript - 尝试在构造函数中执行 foreach
- c# - EF Extensions BulkDelete 方法不使用外键删除
- swift - 如何快速从实时视频中每5秒捕获一帧
- react-native - react native flatlist 卡中的慢动画
- haskell - 在haskell中如何将一个字符串列表转换成里面有一个int列表
- reactjs - 为 React Native SectionList 的每个部分渲染不同的组件
- discord.js - `message.author.bot` 命令如何工作?