JavaScript:从json对象列表构建树状结构

JavaScript:从json对象列表构建树状结构,javascript,json,Javascript,Json,我有一个JSON对象列表 var files = [{name:"1.xml", path:"folder1/1.xml", tag:"folder1", type:"file"}, {name:"2.jpg", path:"folder1/folder2/2.jpg", type:"file", tag:"folder1/folder2"}, {name:"3.doc", path:"folder1/folder2/3.doc", type:"file", tag:"folder1/

我有一个JSON对象列表

var files = [{name:"1.xml", path:"folder1/1.xml", tag:"folder1", type:"file"},
{name:"2.jpg",      path:"folder1/folder2/2.jpg", type:"file", tag:"folder1/folder2"},
{name:"3.doc", path:"folder1/folder2/3.doc", type:"file", tag:"folder1/folder2"}];    
我需要创建以下结构

[
{
name:"folder1",
path:"folder1",
type:"folder",
items:[
    {name:"folder2", 
     path:"folder1/folder2", 
     type:"folder", 
     items:[
         {name:"2.xml",path:"folder1/folder2/2.xml", type="file"},
         {name:"3.xml",path:"folder1/folder2/3.xml", type="file"} 
      ]},
     {name:"1.xml", path:"folder1/1.xml", type="file"}
]}]

基本上,每个文件的标记属性必须成为文件夹,并将文件和其他标记分组到项目集合中

您可以使用此递归函数:

函数构建树(文件){
var result={path:'',项:[]},
i=0;
如果(!files.length)返回[];
//对项目进行排序,以便按文件夹顺序对其进行处理
sort((a,b)=>a.path.localeCompare(b.path));
(函数递归(curr){
var tag=files[i].tag;
tag.substr(curr.path.length+!!curr.path).split('/').forEach(folder=>{
var obj={
名称:文件夹,
路径:(curr.path?curr.path+“/”:“”)+文件夹,
键入:“文件夹”,
项目:[]
};
当前项目推送(obj);
curr=obj;
});
while(i

.as console wrapper{max height:100%!important;top:0;}
你已经尝试过什么了吗?我想Arkej的意思是你已经尝试过解决它了吗?如果是这样,你应该把它贴出来。请提供一个最小的、可验证的、完整的示例,我确实这样做了——但是,一旦文件添加到items集合中,我在递归方面遇到了麻烦。这些是JavaScript对象。JSON是一种文本格式。请阅读
json
标记的使用说明。