Javascript 尝试递归循环树时遇到问题
我试图在一棵树上循环,通过它的Javascript 尝试递归循环树时遇到问题,javascript,recursion,tree,Javascript,Recursion,Tree,我试图在一棵树上循环,通过它的id查找节点,代码如下: <!DOCTYPE html> <meta charset="utf-8"> <html> <head> <title>Hi there</title> <script> function getNode(node, id) { if (node.id === id) { return node; }
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>
你好
函数getNode(节点,id){
如果(node.id==id){
返回节点;
}
if(节点项){
for(设x个node.items){
返回getNode(x,id);
}
}
}
函数加载(){
变量节点=[{
id:0,
标签:'根',
项目:[{
id:1,
标签:“一”
}, {
id:2,
标签:“两个”
}, {
id:3,
标签:“三”
}, {
id:4,
标签:“四”
}]
}];
var n=节点[0];
var-node=getNode(n,3);
console.log(节点);
}
window.onload=load();
当我调用load
递归函数返回undefined时,我遇到了这个问题。有没有关于如何解决这个问题的提示
for (let x of node.items) {
return getNode(x, id);
}
这将查看第一个项目,不管它找到了什么,它都会返回getNode的结果。因此,它向下走到id=1的项,然后返回undefined,并继续返回undefined返回堆栈。它从不移动到其他项(即,循环不做任何事情)
相反,它应该只在找到它时返回,或者转到下一项
函数getNode(节点,id){
如果(node.id==id){
返回节点;
}
if(节点项){
for(设x个node.items){
var result=getNode(x,id);
如果(结果){
返回结果;//您不能对此执行递归操作,因为items[0]没有“items”属性,因此当涉及到
{
id: 1,
label: "one"
}
和返回未定义。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。它可以很成功!谢谢…五分钟后我会把它标记为解决方案!看看固定的代码,复制并运行它,它工作了。