Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何迭代所有子元素并返回找到的元素?_Javascript_Typescript - Fatal编程技术网

Javascript 如何迭代所有子元素并返回找到的元素?

Javascript 如何迭代所有子元素并返回找到的元素?,javascript,typescript,Javascript,Typescript,我有一个find()函数,它在嵌套结构中按标记名查找元素。我尝试在所有子元素中查找匹配的元素 function find(tag: string) { let children = data.children; for(let i = 0; i <= children.length; i++) { if (children[i].type == 0 && children[i].tag == tag) {

我有一个find()函数,它在嵌套结构中按标记名查找元素。我尝试在所有子元素中查找匹配的元素

function find(tag: string) {

    let children = data.children;

    for(let i = 0; i <= children.length; i++) {
       
                if (children[i].type == 0 && children[i].tag == tag) {
            return children[i];
        } else {
            
            if (children[i].children) {
                children = children[i].children;
            }
        }
     
    }
}
我也试过这个:

function find(tag: string) {

let children = data.children;
let found;

  return function() {
    for(let i = 0; i < children.length; i++) {
         if (children[i].tag == tag) {
             return;
         } 

         if (children[i].children) {
             children = children[i].children;
         }
    }
  }
}


let a = find('tag');
let result = a();
console.log(result);
函数查找(标记:字符串){
让children=data.children;
让发现;
返回函数(){
for(设i=0;i
如果(children[i]){children=children[i];}没有找到,你就把整个循环设置成一个元素,去掉它,同样在for循环中也应该这样做如果(children[i]){children=children[i];}没有找到,你就把整个循环设置成一个元素,同样在for循环中应该做i主要问题:

  • 您需要使用
    主要问题:


    • 您需要使用
      found,我得到typescipt错误,该变量从未读取,并且我无法将子项重新分配给子项[I]。xhildren@jony你移除了最后一部分了吗最后一部分是什么?@joey如果(children[i]){children=children[i];},@joey确切地说,把它拿出来,那就是问题的原因了。找到了什么,我得到了typescit错误,该变量从未读取,我无法将子项重新分配给子项[I]。xhildren@jony你把最后一部分拿走了吗?那最后一部分呢?@joey如果(children[i]){children=children[i];},@joey确切地说,把它拿出来,那就是问题的根源谢谢你,是否可以只使用while循环来编写此代码?递归停止条件在哪里?在我看来,为
      循环保留
      比在这里使用
      while
      更好。递归停止条件是
      return
      :每个递归调用都会将结果返回到上一个函数,如果找到了某个对象,该函数就会返回结果(
      return
      将停止执行函数的其余代码)。为什么在if-else条件下使用
      if(found)
      ,不是在外循环?因为此代码返回找到的第一个结果,当我们在子对象上循环时,我们希望在找到某个对象后立即停止函数执行,否则它将检查下一个子对象,并且对于此子对象,
      found
      可能会变为false,然后我们将没有结果非常感谢,是否可以只使用while循环来编写此代码?递归停止条件在哪里?在我看来,为
      循环保留
      比在这里使用
      while
      更好。递归停止条件是
      return
      :每个递归调用都会将结果返回到上一个函数,如果找到了某个对象,该函数就会返回结果(
      return
      将停止执行函数的其余代码)。为什么在if-else条件下使用
      if(found)
      ,非外部-内部循环?因为此代码返回找到的第一个结果,当我们在子对象上循环时,我们希望在找到某个对象后立即停止函数执行,否则它将检查下一个子对象,并且对于此子对象,
      found
      可能会变为false,然后我们将没有结果
      function find(tag: string) {
      
      let children = data.children;
      let found;
      
        return function() {
          for(let i = 0; i < children.length; i++) {
               if (children[i].tag == tag) {
                   return;
               } 
      
               if (children[i].children) {
                   children = children[i].children;
               }
          }
        }
      }
      
      
      let a = find('tag');
      let result = a();
      console.log(result);