gpt4 book ai didi

javascript - 具有嵌套树的递归函数未在 'order' 中返回

转载 作者:行者123 更新时间:2023-11-28 17:01:31 25 4
gpt4 key购买 nike

我有一个包含嵌套数组的数据结构 - 我想显示数据以使其看起来像文件结构 - 因此嵌套数据表示为嵌套文件/文件夹。然而,在控制台记录中,递归函数返回的内容并不代表数据结构的嵌套性质。

这是我的数据结构:

const data = {
"root": [
{
"type": "folder",
"name": "one",
"children": [
{
"type": "folder",
"name": "one",
"children": []
},
{
"type": "file",
"name": "two",
"extension": ".txt",
"preview": "photos.google.com/abc.jpg"
},
{
"type": "file",
"name": "four",
"extension": ".txt",
"preview": "photos.google.com/abc.jpg"
}
]
},
{
"type": "file",
"name": "two",
"extension": ".txt",
"preview": "photos.google.com/abc.jpg"
},
{
"type": "file",
"name": "three",
"extension": ".txt",
"preview": "photos.google.com/abc.jpg"
},
{
"type": "file",
"name": "four",
"extension": ".txt",
"preview": "photos.google.com/abc.jpg"
}
]
}

还有我的递归函数:

const recurse = (data, children = false) => {
data.forEach(object => {
if (object.type === 'folder') {
recurse(object.children, true)
}
if (children) {
console.log(' ' + object.type + ' ' + object.name);
} else {
console.log(object.type + ' ' + object.name);
}
})
}

recurse(data.root)

控制台日志:

'   folder one'
' file two'
' file four'
'folder one'
'file two'
'file three'
'file four'

所以该函数是从结构内部向外打印。如果我想以反射(reflect)数据结构嵌套性质的方式显示它,我应该使用什么方法?提前致谢

最佳答案

@j.xavier.atero 比我快一点。 :)

我认为你必须将递归放在函数的末尾。这样您就可以首先获取文件夹one,然后获取其子文件夹。

const recurse = (data, children = false) => {
data.forEach(object => {
if (children) {
console.log(' ' + object.type + ' ' + object.name);
} else {
console.log(object.type + ' ' + object.name);
}
if (object.type === 'folder') {
recurse(object.children, true)
}
})
}

recurse(data.root)

评论更新

我想说为递归函数添加一个额外的参数。

const recurse = (data, level = 0) => {
data.forEach(object => {
console.log(Array(level).join(' ') + object.type + ' ' + object.name);

if (object.type === 'folder') {
recurse(object.children, level + 1)
}
})
}

recurse(data.root)

这会跟踪递归函数的深度。如果是 child 的话,你甚至不需要检查。

关于javascript - 具有嵌套树的递归函数未在 'order' 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57305859/

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