当内循环完成作业时,停止外循环运行

时间:2017-12-10 23:17:37

标签: javascript node.js ejs

我要做的是在值匹配时向表单添加选中的复选框,否则添加标准未选中的复选框。检查部分工作正常,并且添加了选中的复选框,不幸的是,第二个 - 未检查也被添加,导致重复的条目。

我尝试在内循环中将其作为if else语句,但这会给我带来奇怪的结果(对我来说)。所以我正在寻找一种方法来阻止外循环创建副本。我正在使用EJS for Node。

<% 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> 
<% } %>    

2 个答案:

答案 0 :(得分:2)

根据你的意思,停止外循环运行&#39;,你可以使用labeled break or continue从内循环体内的外环中断或继续:

outer: for (...) {
  for (...) {
    if (...) continue outer;
  }
}

通过向外部循环添加标签并向内部循环体添加<% continue outer; %>,这与EJS一样。

如果我理解正确,你真的不想停止外循环运行,但想继续下一个外循环迭代 - 所以你会选择continue

答案 1 :(得分:2)

在我看来,如果我正确理解你的代码,就不需要内循环了(不知道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循环更快。

相关问题