gpt4 book ai didi

javascript - 尝试递归循环树时遇到问题

转载 作者:行者123 更新时间:2023-11-30 11:29:22 25 4
gpt4 key购买 nike

我试图遍历一棵树和它的项目,以便通过其 id 查找节点,这是代码:

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>Hi there</title>
<script>
function getNode(node, id) {
if (node.id === id) {
return node;
}
if (node.items) {
for (let x of node.items) {
return getNode(x, id);
}
}
}

function load() {
var nodes = [{
id: 0,
label: 'root',
items: [{
id: 1,
label: 'one'
}, {
id: 2,
label: 'two'
}, {
id: 3,
label: 'three'
}, {
id: 4,
label: 'four'
}]
}];
var n = nodes[0];
var node = getNode(n, 3);
console.log(node);
}

window.onload = load();
</script>
</head>
<body>
</body>
</html>

我在调用 load 时遇到了问题,递归函数返回未定义。关于如何解决这个问题的任何提示?

最佳答案

for (let x of node.items) {
return getNode(x, id);
}

这将查看第一个项目,无论找到什么,它都会返回 getNode 的结果。所以它向下走到 id=1 的项目,然后返回 undefined,并继续返回 undefined 返回堆栈。它永远不会移动到其余的项目(即,循环不做任何事情)。

相反,它应该只有在找到它时才返回,或者继续下一个项目。

function getNode(node, id) {
if (node.id === id) {
return node;
}
if (node.items) {
for (let x of node.items) {
var result = getNode(x, id);
if (result) {
return result; //<<---- only returning if we found it
}
}
}
}

function load() {
var nodes = [{
id: 0,
label: 'root',
items: [{
id: 1,
label: 'one'
}, {
id: 2,
label: 'two'
}, {
id: 3,
label: 'three'
}, {
id: 4,
label: 'four'
}]
}];

var n = nodes[0];

var node = getNode(n, 3);
console.log(node);
}

load();

关于javascript - 尝试递归循环树时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46818688/

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