跳过执行/循环

时间:2018-01-08 15:27:38

标签: javascript node.js loops null do-while

嘿伙计们我正在编写一个算法来从NodeTree中移除具体的分支(就像DSF一样)。如果选择节点算法的名称,则检查此节点是否是另一个节点的父节点;如果是,它需要此节点的子节点,并添加到堆栈等。希望代码能够呈现出来。

问题是当我认为应该执行一次时,循环执行/执行两次。内部出现空状态的事情,因为它被跳过了。

  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!==”。有任何想法吗?如果事情不清楚,抱歉我会尝试解释。 此致!

1 个答案:

答案 0 :(得分:2)

似乎评论不足以让你妨碍我,然后我会添加解释,添加我自己的:

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

_另一件事我不会解释(因为我希望保持尽可能清晰,这是一个更高级的功能),Jonas W.评论说你的情况是错误的。虽然意思是“只要”。只要stackTemp.next为假(或空,未定义等),您的代码就会“保持循环”。你可能想要相反的。

_最后,将values存储在stackTemp.next中以将其放入数组中是没用的。如果它是一个对象(或函数),则不会复制它的值,因为JS通过引用传递它们。您可以将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(); } 不会受到影响。

这将是结果,如果它仍然不起作用,来自其他东西:

{{1}}
相关问题