Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lodash将字符串数组转换为树对象的最有效方法是什么?_Javascript_Arrays_Algorithm_Tree_Lodash - Fatal编程技术网

Javascript 使用lodash将字符串数组转换为树对象的最有效方法是什么?

Javascript 使用lodash将字符串数组转换为树对象的最有效方法是什么?,javascript,arrays,algorithm,tree,lodash,Javascript,Arrays,Algorithm,Tree,Lodash,我正在寻找一种方法,如果可能的话,用Lodash或纯javascript(如果效率更高的话)将字符串数组(表示路径)转换成树状对象。我怀疑我们必须在内部使用一些递归函数,但我正在努力找到如何做到这一点 var路径=[ ['folder1','folder2','name1.txt'], ['folder1','folder2','name2.txt'], ['folder1','folder3','name3.txt'], ['folder2','folder4','name4.txt'],

我正在寻找一种方法,如果可能的话,用Lodash或纯javascript(如果效率更高的话)将字符串数组(表示路径)转换成树状对象。我怀疑我们必须在内部使用一些递归函数,但我正在努力找到如何做到这一点

var路径=[
['folder1','folder2','name1.txt'],
['folder1','folder2','name2.txt'],
['folder1','folder3','name3.txt'],
['folder2','folder4','name4.txt'],
['folder2','folder5','name5.txt'],
['folder2','folder5','folder6','name6.txt'],
['folder3','name7.txt']
];
变量树=[
{
名称:“folder1”,
儿童:[
{
名称:'folder2',
儿童:[
{
名称:“name1.txt”
},
{
名称:“name2.txt”
}
]
},
{
名称:“folder3”,
儿童:[
{
名称:“name3.txt”
}
]
}
]
},
{
名称:'folder2',
儿童:[
{
名称:“folder4”,
儿童:[
{
名称:“name4.txt”
}
]
},
{
名称:“folder5”,
儿童:[
{
名称:'name5.txt'
},
{
名称:“folder6”,
子项:[{name:'name6.txt'}]
}
]
}
]
},
{
名称:“folder3”,
子项:[{name:'name7.txt'}]
}
];
var pathtore=函数(路径){
var-tree=[];
//... ???
回归树;
};

路径树
您可以使用
forEach()
reduce()
方法来实现这一点

var路径=[“folder1”、“folder2”、“name1.txt”]、[“folder1”、“folder2”、“name2.txt”]、[“folder1”、“folder3”、“name3.txt”]、[“folder2”、“folder4”、“name4.txt”]、[“folder2”、“name5.txt”]、[“folder2”、“folder5”、“folder6”、“name6.txt”]、[“folder3”、“name7.txt”]
const result=[],tmp={result}
路径。forEach(路径=>{
reduce(函数(r,name,i){
如果(!r[name]){
常量o={name},子类=[]
r[name]={result:children}
if(路径[i+1])o.children=children
r、 结果:推送(o)
}
返回r[名称]
},tmp)
})

console.log(result)
做你的研究,寻找相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运在寻找“最有效的方法”之前,可能先实施“工作方法”,然后在遇到特定问题时再回来。