【发布时间】:2020-03-21 19:05:46
【问题描述】:
我从后端得到一个文件路径列表,它代表一个文件夹结构,看起来像这样:
paths = ["path/to/file1.doc", "path/to/file2.doc", "foo/bar.doc]
路径的长度是任意的。为了使用文件树组件(angular2-tree-component),我需要将此数据转换为following format:
nodes = [
{
"name": "path",
"children": [
{
"name": "to",
"children": [
{"name": "file1.doc"},
{"name": "file2.doc"}
]
}
]
},
{
"name": "foo",
"children": [
{"name": "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(nodes)) 时,我得到以下结果:
{
"path": {
"to": {
"file1.doc": {},
"file2.doc": {}
}
},
"foo": {
"bar": {}
}
}
我不知道如何从这里开始 = 如何在以所需结构构建最终数组时迭代所有键和值。
【问题讨论】:
标签: javascript angular typescript mapping