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代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。它可以很成功!谢谢…五分钟后我会把它标记为解决方案!看看固定的代码,复制并运行它,它工作了。