Javascript 如何使用节点js将字符串路径转换为JSON父子树?
我一直在尝试使用Javascript 如何使用节点js将字符串路径转换为JSON父子树?,javascript,node.js,json,ecmascript-6,treeview,Javascript,Node.js,Json,Ecmascript 6,Treeview,我一直在尝试使用节点js将路径数组转换为JSON父子树。我正在跟随@Nenad Vracar建造这棵树的答案。我使用的是我稍微修改过的上述答案。下面是我的代码: function buildTree(obj) { let result = []; let level = { result }; obj.forEach(item => { if (typeof item.fsLocation != "undefined") {
节点js
将路径数组转换为JSON
父子树。我正在跟随@Nenad Vracar建造这棵树的答案。我使用的是我稍微修改过的上述答案。下面是我的代码:
function buildTree(obj) {
let result = [];
let level = {
result
};
obj.forEach(item => {
if (typeof item.fsLocation != "undefined") {
var obj = {}
var path = ""
item.fsLocation.split('/').reduce((r, name, i, a) => {
path += "/"+name
if (!r[name]) {
r[name] = {
result:[]
};
obj = {
name,
children: r[name].result
}
if(r[name].result.length < 1){
obj["path"] = item.fsLocation
obj["fileSize"] = item.fileSize
obj["createDate"] = item.createDate
obj["editDate"] = item.editDate
obj["fileType"] = item.fileType
obj["version"] = item.version
}
r.result.push(obj)
}
return r[name];
}, level)
}
})
return result
}
使用上述代码,我的输出如下:
[
{
"name":"Events",
"children":[
{
"name":"Plays",
"children":[
{
"name":"Technologies",
"children":[
{
"name":"Continuity",
"children":[
{
"name":"technology.pptx",
"children":[
],
"path":"Events/Plays/Technologies/Continuity/technology.pptx",
"fileSize":46845322,
"createDate":"2019-10-03T07:00:00Z",
"editDate":"2019-10-03T07:00:00Z",
"fileType":"pptx",
"version":"10.0"
}
],
"path":"Events/Plays/Technologies/Continuity/technology.pptx",
"fileSize":46845322,
"createDate":"2019-10-03T07:00:00Z",
"editDate":"2019-10-03T07:00:00Z",
"fileType":"pptx",
"version":"10.0"
},
{
"name":"Technologies",
"children":[
{
"name":"operations.pptx",
"children":[
],
"path":"Events/Plays/Technologies/operations.pptx",
"fileSize":23642178,
"createDate":"2019-01-08T08:00:00Z",
"editDate":"2019-01-09T08:00:00Z",
"fileType":"pptx",
"version":"15.0"
},
{
"name":"Solution.pdf",
"children":[
],
"path":"Events/Plays/Technologies/Solution.pdf",
"fileSize":275138,
"createDate":"2016-06-16T22:42:16Z",
"editDate":"2016-06-16T22:42:16Z",
"fileType":"pdf",
"version":"1.0"
}
],
"path":"Events/Plays/Technologies/operations.pptx",
"fileSize":23642178,
"createDate":"2019-01-08T08:00:00",
"editDate":"2019-01-09T08:00:00Z",
"fileType":"pptx",
"version":"15.0"
}
]
}
]
}
]
}
]
我想得到如下输出
[
{
"name":"Events",
"path":"Events",
"children":[
{
"name":"Plays",
"path":"Events/Plays",
"children":[
{
"name":"Technologies",
"path":"Events/Plays/Technologies",
"children":[
{
"name":"Continuity",
"path":"Events/Plays/Technologies/Continuity",
"children":[
{
"name":"technology.pptx",
"children":[
],
"path":"Events/Plays/Technologies/Continuity/technology.pptx",
"fileSize":46845322,
"createDate":"2019-10-03T07:00:00Z",
"editDate":"2019-10-03T07:00:00Z",
"fileType":"pptx",
"version":"10.0"
}
]
},
{
"name":"Technologies",
"path":"Events/Plays/Technologies",
"children":[
{
"name":"operations.pptx",
"children":[
],
"path":"Events/Plays/Technologies/operations.pptx",
"fileSize":23642178,
"createDate":"2019-01-08T08:00:00Z",
"editDate":"2019-01-09T08:00:00Z",
"fileType":"pptx",
"version":"15.0"
},
{
"name":"Solution.pdf",
"children":[
],
"path":"Events/Plays/Technologies/Solution.pdf",
"fileSize":275138,
"createDate":"2016-06-16T22:42:16Z",
"editDate":"2016-06-16T22:42:16Z",
"fileType":"pdf",
"version":"1.0"
}
]
}
]
}
]
}
]
}
]
你知道如何生成上述输出吗?总是倾向于可读性而不是花哨:
const arr=[{
“文件名”:“operations.pptx”,
“文件大小”:23642178,
“文件类型”:“pptx”,
“fsLocation”:“Events/Plays/Technologies/operations.pptx”,
“创建日期”:“2019-01-08T08:00:00Z”,
“编辑日期”:“2019-01-09T08:00:00Z”,
“版本”:“15.0”
},
{
“创建日期”:“2019-10-03T07:00:00Z”,
“文件类型”:“pptx”,
“fsLocation”:“Events/Plays/Technologies/Continuity/technology.pptx”,
“文件大小”:46845322,
“文件名”:“technology.pptx”,
“编辑日期”:“2019-10-03T07:00:00Z”,
“版本”:“10.0”
},
{
“文件名”:“Solution.pdf”,
“创建日期”:“2016-06-16T22:42:16Z”,
“文件大小”:275138,
“fsLocation”:“Events/Plays/Technologies/Solution.pdf”,
“文件类型”:“pdf”,
“编辑日期”:“2016-06-16T22:42:16Z”,
“版本”:“1.0”
}
]
常数树={
名称:'根',
路径:“”,
儿童:[]
}
用于(arr常数){
让节点=树
const nodename=e.fsLocation.split(“/”)
while(nodenames.length>0){
const nodename=nodename.shift()
if(!node.children.map(e=>e.name).includes(nodename)){
node.children.push({
姓名:nodename,,
路径:[node.path,nodename].join(“/”),
儿童:[]
})
}
node=node.children.filter(e=>e.name===nodename)[0]
}
}
log(JSON.stringify(tree,null,2))代码>
[
{
"name":"Events",
"path":"Events",
"children":[
{
"name":"Plays",
"path":"Events/Plays",
"children":[
{
"name":"Technologies",
"path":"Events/Plays/Technologies",
"children":[
{
"name":"Continuity",
"path":"Events/Plays/Technologies/Continuity",
"children":[
{
"name":"technology.pptx",
"children":[
],
"path":"Events/Plays/Technologies/Continuity/technology.pptx",
"fileSize":46845322,
"createDate":"2019-10-03T07:00:00Z",
"editDate":"2019-10-03T07:00:00Z",
"fileType":"pptx",
"version":"10.0"
}
]
},
{
"name":"Technologies",
"path":"Events/Plays/Technologies",
"children":[
{
"name":"operations.pptx",
"children":[
],
"path":"Events/Plays/Technologies/operations.pptx",
"fileSize":23642178,
"createDate":"2019-01-08T08:00:00Z",
"editDate":"2019-01-09T08:00:00Z",
"fileType":"pptx",
"version":"15.0"
},
{
"name":"Solution.pdf",
"children":[
],
"path":"Events/Plays/Technologies/Solution.pdf",
"fileSize":275138,
"createDate":"2016-06-16T22:42:16Z",
"editDate":"2016-06-16T22:42:16Z",
"fileType":"pdf",
"version":"1.0"
}
]
}
]
}
]
}
]
}
]