Javascript 在内部循环完成作业后停止外部循环运行

Javascript 在内部循环完成作业后停止外部循环运行,javascript,node.js,ejs,Javascript,Node.js,Ejs,我试图做的是在值匹配时向表单添加一个选中复选框,否则添加一个标准的非选中复选框。检查部分工作得很好,并且添加了选中的复选框,不幸的是,还添加了第二个未选中的复选框,导致重复条目 我试着在内部循环中使用if-else语句,但结果(对我来说)很奇怪。因此,我正在寻找一种方法来阻止外部循环创建副本。我正在使用EJS作为节点 <% for (var i = 0; i < sources.sources.length; i++) { %> <% for (v

我试图做的是在值匹配时向表单添加一个选中复选框,否则添加一个标准的非选中复选框。检查部分工作得很好,并且添加了选中的复选框,不幸的是,还添加了第二个未选中的复选框,导致重复条目

我试着在内部循环中使用if-else语句,但结果(对我来说)很奇怪。因此,我正在寻找一种方法来阻止外部循环创建副本。我正在使用EJS作为节点

<% for (var i = 0; i < sources.sources.length; i++) { %>
            <% for (var j = 0 ; j < source.length ; j++) {  %>
                <% if (source[j] == sources.sources[i].id)  { %>
                    <div class="checkbox-inline">
                        <label>
                          <input type="checkbox" name="source" value="<%=sources.sources[i].id%>" checked> <%=sources.sources[i].name%>
                        </label>
                    </div>
                <% } %> 
            <% } %> 
                    <div class="checkbox-inline">
                        <label>
                          <input type="checkbox" name="source" value="<%=sources.sources[i].id%>" > <%=sources.sources[i].name%>
                        </label>
                    </div> 
<% } %>    

根据“停止外循环运行”的含义,您可以使用从内循环主体内中断外循环或从外循环继续:

outer: for (...) {
  for (...) {
    if (...) continue outer;
  }
}
这同样适用于EJS,将标签添加到外部循环,并将
添加到内部循环体


如果我理解正确,您并不真的想停止外循环运行,而是想继续下一次外循环迭代-因此您会根据“停止外循环运行”的含义选择“继续”

,可以使用从内环体中断开或从外环继续:

outer: for (...) {
  for (...) {
    if (...) continue outer;
  }
}
这同样适用于EJS,将标签添加到外部循环,并将
添加到内部循环体


如果我理解正确,您不会真的想停止外循环的运行,而是想继续下一个外循环迭代-因此您会选择
继续

在我看来,如果我正确理解您的代码,似乎不需要内循环(不知道ejs是什么,但在我看来这完全像一个lodash模板)。让您的模板看起来像这样是否更有意义:

<% for (var i = 0; i < sources.sources.length; i++) { %>
    <div class="checkbox-inline">
        <label>
          <input 
              type="checkbox" name="source" value="<%=sources.sources[i].id%>" 
              <% if (source.indexOf(sources.sources[i].id) !== -1) { %>  checked <% } %>
          > <%=sources.sources[i].name%>
        </label>
    </div> 
<% } %>


更少的重复,更好的可读性,以及
indexOf
检查必须(潜在地)比for循环快。

在我看来,如果我正确理解您的代码,就不需要内部循环(不知道ejs是什么,但在我看来这与lodash模板一模一样).让您的模板看起来像这样是否更有意义:

<% for (var i = 0; i < sources.sources.length; i++) { %>
    <div class="checkbox-inline">
        <label>
          <input 
              type="checkbox" name="source" value="<%=sources.sources[i].id%>" 
              <% if (source.indexOf(sources.sources[i].id) !== -1) { %>  checked <% } %>
          > <%=sources.sources[i].name%>
        </label>
    </div> 
<% } %>

更少的重复、更好的可读性imo和
indexOf
检查必须(潜在地)比for循环快。

…或
source.includes()
-两者都执行严格的相等性检查,但这不应该是这里的问题…或
source.includes()
-两者都执行严格的相等性检查,但这不应该成为问题。