Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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 跳过do/while循环_Javascript_Node.js_Loops_Null_Do While - Fatal编程技术网

Javascript 跳过do/while循环

Javascript 跳过do/while循环,javascript,node.js,loops,null,do-while,Javascript,Node.js,Loops,Null,Do While,嘿,伙计们,我正在写一个算法,从NodeTree中删除具体的分支(比如DSF)。如果选择节点名称,则算法将检查此节点是否为其他节点的父节点;如果是,它将获取该节点的子节点,并将其添加到堆栈中,依此类推。希望代码能够展示这一点 问题是循环do/while执行了两次,而我认为应该执行一次。while中的null条件发生了一些情况,因为它被跳过 stack.push(keys.head); // visited.push(flag.data); while(stack.size&g

嘿,伙计们,我正在写一个算法,从NodeTree中删除具体的分支(比如DSF)。如果选择节点名称,则算法将检查此节点是否为其他节点的父节点;如果是,它将获取该节点的子节点,并将其添加到堆栈中,依此类推。希望代码能够展示这一点

问题是循环do/while执行了两次,而我认为应该执行一次。while中的null条件发生了一些情况,因为它被跳过

  stack.push(keys.head);
    // visited.push(flag.data);
    while(stack.size>0){
        stackTemp=stack.get()

        stack.pop();
        do{
          values=stackTemp.next;
          stack.push(values);
          stackTemp=values.next;
          stack.show();

        }while (!stackTemp)
        stackTemp=stack.get()
        // console.log(stackTemp);
        keyTemp=this.map.get(stackTemp.data);
        if(keyTemp=undefined)
        stack.pop();

      }
我还检查了“stackTemp!=”。有什么想法吗?如果有不清楚的地方,对不起,我会尽力解释。
问候

看来这些评论还不足以让你碍手碍脚,接下来我将添加解释,并添加我自己的解释:

_Bergi建议您使用另一种
while
语法,原因是:
do{/*code*/}while(condition)
将至少执行一次代码,而不管条件如何。您可能希望使用
while(condition){/*code*/}
,因为使用此语法,如果条件失败,您将不会进入循环,并且您的条件是“如果存在var值”,如果失败,您就不想输入

_还有一件事我不想解释(因为我想保持尽可能清楚,这是一个更高级的功能),乔纳斯W.评论说你的情况是错误的。While的意思是“只要”。您的代码告诉您“只要
stackTemp
为false(或为空、未定义等),就留在循环中”。你可能想要相反的结果

_最后,在
值中存储
stackTemp.next
以将其放置在数组中是没有用的。如果它是一个对象(或函数),则不会复制它的值,因为JS通过引用传递它们。您可以只将
stackTemp.next
存储在数组中,它将是相同的,因为
stackTemp
刚刚被替换,它的引用被更改,并且存储在数组中的
stackTemp.next
不会受到影响

如果它仍然不起作用,这将是来自其他方面的结果:

stack.push(keys.head);
// visited.push(flag.data);
while(stack.size>0){
    stackTemp=stack.get()

    stack.pop();
    while (stackTemp){ //not supposed to enter here is stackTemp is empty
      stack.push(stackTemp.next);
      stackTemp=stackTemp.next; //stackTemp reference is replaced
      stack.show();
    }
    stackTemp=stack.get()
    // console.log(stackTemp);
    keyTemp=this.map.get(stackTemp.data);
    if(keyTemp=undefined)
    stack.pop();

}

看来这些评论还不足以让你碍事,我将添加解释,并添加我自己的解释:

_Bergi建议您使用另一种
while
语法,原因是:
do{/*code*/}while(condition)
将至少执行一次代码,而不管条件如何。您可能希望使用
while(condition){/*code*/}
,因为使用此语法,如果条件失败,您将不会进入循环,并且您的条件是“如果存在var值”,如果失败,您就不想输入

_还有一件事我不想解释(因为我想保持尽可能清楚,这是一个更高级的功能),乔纳斯W.评论说你的情况是错误的。While的意思是“只要”。您的代码告诉您“只要
stackTemp
为false(或为空、未定义等),就留在循环中”。你可能想要相反的结果

_最后,在
值中存储
stackTemp.next
以将其放置在数组中是没有用的。如果它是一个对象(或函数),则不会复制它的值,因为JS通过引用传递它们。您可以只将
stackTemp.next
存储在数组中,它将是相同的,因为
stackTemp
刚刚被替换,它的引用被更改,并且存储在数组中的
stackTemp.next
不会受到影响

如果它仍然不起作用,这将是来自其他方面的结果:

stack.push(keys.head);
// visited.push(flag.data);
while(stack.size>0){
    stackTemp=stack.get()

    stack.pop();
    while (stackTemp){ //not supposed to enter here is stackTemp is empty
      stack.push(stackTemp.next);
      stackTemp=stackTemp.next; //stackTemp reference is replaced
      stack.show();
    }
    stackTemp=stack.get()
    // console.log(stackTemp);
    keyTemp=this.map.get(stackTemp.data);
    if(keyTemp=undefined)
    stack.pop();

}

使用
while
循环而不是
do…while
?您可以随时使用
return
来中断it@Lissy我会使用
break
出于这个目的,因为如果在一个函数中,
return
将退出整个函数,而不仅仅是循环我在做类似的事情,我使用了break,但我认为没有意义,因为函数中的条件,而为什么这个条件不起作用,如果stacktemp已为空,为什么此循环仍继续运行,直到出现错误?
while(stacktemp=stacktemp.next)stack.push(stacktemp)
。。?而且你肯定想要
while(stackTemp)
而不是相反。使用
while
循环而不是
do…while
?你可以随时使用
return
来中断it@Lissy我会使用
break
出于这个目的,因为如果在一个函数中,
return
将退出整个函数,而不仅仅是循环我在做类似的事情,我使用了break,但我认为没有意义,因为函数中的条件,而为什么这个条件不起作用,如果stacktemp已为空,为什么此循环仍继续运行,直到出现错误?
while(stacktemp=stacktemp.next)stack.push(stacktemp)
。。?你肯定想要
while(stackTemp)
,而不是相反。呃,对不起,伙计们,我似乎有点累了,不敢相信我看不到,是的,它从循环中退出,在所有循环重复之后,在第二次尝试时,它抛出了错误消息,抱歉为这么简单的问题浪费时间,谢谢!没问题,很高兴我们能帮助你!呃,抱歉,伙计们,我似乎有点累了,真不敢相信我看不到,是的,它从循环中退出,在所有循环重复之后,在第二次尝试时,它抛出了错误消息,抱歉为这么简单的问题浪费时间,谢谢!没问题,很高兴我们能帮助你!