gpt4 book ai didi

JavaScript - 递归函数中的错误是什么?

转载 作者:行者123 更新时间:2023-11-30 08:23:37 24 4
gpt4 key购买 nike

我尝试获取查询 ID 的完整路径。例如,getPath(6, rawData) 应该返回 [1,2,6]。但是,它返回 [6,6,6]。当我在代码中尝试 console.log 时,看起来自调用函数内部节点的值将覆盖外部节点的值。我无法弄清楚递归函数有什么问题。或者有人可以教我实现相同目标的新方法吗?

代码如下:

const getPath = (id, list) => {
if (!list || !Array.isArray(list)) {
return false
}

for (node of list) {
if (node.id === id) {
return [node.id]
}

let res = getPath(id, node.children)

if (res) {
return [node.id, ...res]
}
}

return false
}

const rawData = [{
id: 1,
parent: null,
children: [{
id: 2,
parent: 1,
children: [{
id: 4,
parent: 2,
children: null
}, {
id: 5,
parent: 2,
children: null
}, {
id: 6,
parent: 2,
children: null
}]
}]
},
{
id: 3,
parent: null,
children: [{
id: 7,
parent: 3,
children: [{
id: 9,
parent: 7,
}]
},
{
id: 8,
parent: 3,
}
]
}
]

console.log(getPath(2, rawData))

最佳答案

您需要声明变量 node 以便它是函数的局部变量。

const getPath = (id, list) => {
if (!list || !Array.isArray(list)) {
return false
}

for (let node of list) {
if (node.id === id) {
return [node.id]
}

let res = getPath(id, node.children)

if (res) {
return [node.id, ...res]
}
}

return false
}

const rawData = [{
id: 1,
parent: null,
children: [{
id: 2,
parent: 1,
children: [{
id: 4,
parent: 2,
children: null
}, {
id: 5,
parent: 2,
children: null
}, {
id: 6,
parent: 2,
children: null
}]
}]
},
{
id: 3,
parent: null,
children: [{
id: 7,
parent: 3,
children: [{
id: 9,
parent: 7,
}]
},
{
id: 8,
parent: 3,
}
]
}
]

console.log(getPath(2, rawData))

关于JavaScript - 递归函数中的错误是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486144/

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