gpt4 book ai didi

javascript - 跳过 do/while 循环

转载 作者:行者123 更新时间:2023-12-01 02:33:19 28 4
gpt4 key购买 nike

大家好,我正在编写一个算法来从 NodeTree 中删除具体分支(例如 DSF)。如果您选择 Node 的名称,算法将检查该 Node 是否是其他 Node 的父 Node ;如果是,它会获取该 Node 的子 Node ,并添加到堆栈中,依此类推。希望代码能够呈现这一点。

问题是循环 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 值存在",如果失败,你就不想进入。

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

_最后,将stackTemp.next存储在values中放置到数组中是没有用的。如果它是一个对象(或函数),则不会复制它的值,因为 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();

}

关于javascript - 跳过 do/while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153280/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com