【发布时间】:2019-11-07 07:06:55
【问题描述】:
在纯 javascript 中,我正在尝试创建一个函数,该函数将返回文件夹、其子文件夹和任何文件的树结构 (json)。我正在尝试使用递归来实现这一点。 下面代码的问题是它在第一次递归调用之后就停止了。
我知道在 JS 中你做引用,我需要创建一个新对象,我将之前调用的值传递给它,但我正在努力这样做。
function fun(file, json) {
var tempJson = {
'name' : json.name || '',
'children' : obj.children || new Object()
};
if (file.type == 'file') {
tempJson.type = 'file';
tempJson.children = {}; // this will be empty, since there are no children
}
else {
tempJson.type = 'dir';
var listed = file.listFiles();
if (listed.length > 0) {
for each (var item in listed) {
tempJson.children = fun(item, tempJson);
}
} else {
tempJson.children = {};
}
}
return tempJson;
}
示例
来自一个目录结构,例如:
-root
--file1
--dir1
---file1.1
--dir2
我想得到一个像这样的 json:
{
name: 'root',
type: 'dir',
children : [
{
name: 'file1',
type: 'file',
children: {}
},
{
name: 'dir1',
type: 'dir',
children:
{
name: 'file1.1',
type: 'file',
children: {},
}
},
name: 'dir2',
type: 'dir',
children: {}
}
第一次调用: var 对象 = 新对象(); 乐趣(根目录,对象);
希望这是有道理的。 谢谢!
【问题讨论】:
-
对于初学者,你不能将你的函数命名为
function,但除此之外,你也根本没有递归。 -
你的意思是对象不是 json,对吧?
-
@Andrew - 感谢您指出这一点。我刚刚编辑了名称,现在它反映了我最初的意思。
-
您可能希望
children成为一个数组。 -
@ibrahimmahrir 我的意思是对象,是的
标签: javascript recursion tree ecmascript-5