javascript - 跳过 do/while 循环

标签 javascript node.js loops null do-while

大家好,我正在编写一个算法来从 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/

相关文章:

node.js - 无论如何, Mocha 超时已超过

javascript - 使用 javascript 选择每个表列

c - 如何遍历目录并对每个文件执行任务

javascript - 表单对象中的换行符

javascript - Visual Studio - Javascript UWP - 通过矢量图形的视觉 Assets

node.js - 使用 nodemailer 发送电子邮件在 Heroku 上失败

node.js - 对于服务器端 meteor ,为什么没有定义 "module"?

c++ - 如何在 case 之后循环回到 switch 语句的开头

javascript - 浏览器预加载扫描和 Javascript 文件放置

javascript - 无法使用vuejs和electronicjs创建简单的文件资源管理器