javascript - 如何基于 api 调用遍历树/数组 -Javascript

标签 javascript recursion

有没有一种方法可以使用 DFS 遍历树,其中树不是预定义其所有子节点,而是基于服务器响应。例如,假设我有一棵树:

树 = ['a','b','c']; 在上面的情况下,我不知道这些节点是否有任何子节点,当我调用服务器时我就会知道。 所以现在我获取树的第一个节点,即“a”并将其传递给网址:

“https://test.com/'a' 并获取节点 'a' 的子节点的响应。

o/p: 'a'= ['1','2','3'];

然后我取'a'的第一个节点,即:'1',(类似于tree['a']['1']) 并将其传递到相同的 url,例如 "https://test.com/'1' 并获取节点 '1' 的所有子节点的响应。 我想说的是,除非我调用 api,否则我不知道一个节点有多少个子节点。因此我这里的代码进入了一些无限循环。而且它不执行 DFS,而是执行 BFS。

function getNode(arr) {
    fetch("https://test.com/'a'", function(data){
        if (Array.isArray(data)) {
            data.forEach(function(node,i){
                var promises = resolve(self.getNode(arr[i]));
            })
        }
    });
}

知道这种方法是如何运作的吗? 谢谢

最佳答案

创建一个异步递归函数来填充树。您的函数已经具备了大部分所需的部分。两个缺失的部分是每个递归的父节点和每个递归应从中获取数据的 url。

假设一个虚构的 addNode(aParent, aNode) 函数将一个节点添加到树中:

function getNode(parentNode, url) {

   //Get remote data from this url
   fetch(url, function(data){

       if (Array.isArray(data)) {

                //Go through each node it returns
                data.forEach(function(childNode){

                    //Add to the specified parent  
                    addNode(parentNode, childNode);

                    //Construct the new url and 
                    //call the same function with each received child as a parent
                    getNode(url + '/' + childNode, childNode);
                })

            }
      });
}

当使用根节点和基本 url 调用时,该函数将开始遍历 API 并在收到响应时构建树。

您可以有一个额外的深度参数并控制每次递归的深度。如果您想在用户单击每个节点时加载树,这可能很有用。

关于javascript - 如何基于 api 调用遍历树/数组 -Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55273985/

相关文章:

javascript - 如何在我的网站上添加 Facebook 分享按钮?

javascript - 为什么我的文本网格不不断旋转?

ruby - 斐波那契数列递归的解释

python - 如何在嵌套列表中查找给定元素?

python - 将具有两次递归调用的函数转换为迭代函数

php - 基于一个或多个提供的键递归访问潜在的嵌套值

javascript - 将自定义 header 添加到 Content-disposition 旁边的 FormData/multipart

javascript - 防止双击选择文本

javascript - React Native 从外部源加载 JSX 并在运行时对其进行转换

c++ - 为什么这个递归函数的行为与预期的不同?