如何在Javascript中将字符串数组转换为特定的树结构
我从后端获得一个文件路径列表,它表示一个文件夹结构,如下所示:如何在Javascript中将字符串数组转换为特定的树结构,javascript,angular,typescript,mapping,Javascript,Angular,Typescript,Mapping,我从后端获得一个文件路径列表,它表示一个文件夹结构,如下所示: paths = ["path/to/file1.doc", "path/to/file2.doc", "foo/bar.doc] 路径的长度是任意的。为了使用文件树组件(),我需要将此数据转换为: 我认为转换数据最有效的方法是 首先将阵列与镜像树结构的文件映射,然后映射到 迭代每个键,以最终确定“子/父”关系 第一步: transformToTree(data) { const tree = {}; functio
paths = ["path/to/file1.doc", "path/to/file2.doc", "foo/bar.doc]
路径的长度是任意的。为了使用文件树组件(),我需要将此数据转换为:
我认为转换数据最有效的方法是
transformToTree(data) {
const tree = {};
function addPathsToTree(paths) {
let map = tree
paths.forEach(function(item) {
map[item] = map[item] || {};
map = map[item];
});
}
data.forEach(function(path) {
let pathPart = path.split('/');
addPathsToTree(pathPart);
});
return pathTree;
}
将“节点”传递到transformToTree函数(transformToTree(节点))时,我得到以下结果:
{
"path": {
"to": {
"file1.doc": {},
"file2.doc": {}
}
},
"foo": {
"bar": {}
}
}
我不知道如何从这里开始=如何迭代所有键和值,同时在所需结构中构建最终数组
有几个这样或那样的例子,但我不知道如何使它们适应我的需要。我会使用两个嵌套循环,一个用于路径,一个用于拆分的名称,然后找到名称或创建新对象
var path=[“path/to/file1.doc”、“path/to/file2.doc”、“foo/bar.doc”],
结果=[];
路径减少((r,路径)=>{
path.split('/').reduce((o,name)=>{
var temp=(o.children=o.children | |[]).find(q=>q.name==name);
if(!temp)o.children.push(temp={name});
返回温度;
},r);
返回r;
},{儿童:结果});
控制台日志(结果)代码>
.as控制台包装{最大高度:100%!重要;顶部:0;}
Smart。非常感谢你的帮助!
{
"path": {
"to": {
"file1.doc": {},
"file2.doc": {}
}
},
"foo": {
"bar": {}
}
}