Javascript 跳过do/while循环
嘿,伙计们,我正在写一个算法,从NodeTree中删除具体的分支(比如DSF)。如果选择节点名称,则算法将检查此节点是否为其他节点的父节点;如果是,它将获取该节点的子节点,并将其添加到堆栈中,依此类推。希望代码能够展示这一点 问题是循环do/while执行了两次,而我认为应该执行一次。while中的null条件发生了一些情况,因为它被跳过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
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)
,而不是相反。呃,对不起,伙计们,我似乎有点累了,不敢相信我看不到,是的,它从循环中退出,在所有循环重复之后,在第二次尝试时,它抛出了错误消息,抱歉为这么简单的问题浪费时间,谢谢!没问题,很高兴我们能帮助你!呃,抱歉,伙计们,我似乎有点累了,真不敢相信我看不到,是的,它从循环中退出,在所有循环重复之后,在第二次尝试时,它抛出了错误消息,抱歉为这么简单的问题浪费时间,谢谢!没问题,很高兴我们能帮助你!