gpt4 book ai didi

javascript - 输出JSON的javascript中的递归函数

转载 作者:行者123 更新时间:2023-11-30 19:08:33 26 4
gpt4 key购买 nike

在纯 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: {}
}

第一次调用:变种对象=新对象();乐趣(根目录,对象);

希望这是有道理的。谢谢!

最佳答案

正如评论中指出的那样,children 应该是一个数组:

function fun(entry) {
var entryObj = { // construct the object for this entry
name: entry.name || "",
type: entry.type, // put the type here instead of using an if
children: [] // children must be an array
};

if(entry.type === "dir") { // if this entry is a directory
var childEntries = entry.listFiles(); // get its child entries
for(var childEntry of childEntries) { // and for each one of them
entryObj.children.push(fun(childEntry)); // add the result of the call of 'fun' on them to the children array
}
}

return entryObj;
}

然后这样调用:

var tree = fun(rootEntry);

关于javascript - 输出JSON的javascript中的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com