我要做的是在值匹配时向表单添加选中的复选框,否则添加标准未选中的复选框。检查部分工作正常,并且添加了选中的复选框,不幸的是,第二个 - 未检查也被添加,导致重复的条目。
我尝试在内循环中将其作为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>
<% } %>
答案 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循环更快。