如何使用 EJS 模板语言打破循环?

Kho*_*opa 0 javascript ejs sails.js

我正在使用 sails.js 开发一个简单的 Web 应用程序。

在我的前端代码中,我循环遍历控制器发送的对象数组,并且正在搜索特定对象。我想在找到对象后打破循环。有没有一种干净的方法可以使用 ejs 模板语言来做到这一点?

我在EJS官方网站和sails网站上都找不到任何相关信息。

到目前为止我天真地尝试过:

<% objects.forEach(function(object)  { %>
    <% if(object.someId == someValue) {%>
        <%= object.name %>
        <% break %> <!-- This raise an illegal statement exception -->
    <% } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

以下代码按预期工作,但我正在寻找更干净的解决方案(如果有)

<% var found = false %>
<% objects.forEach(function(object)  { %>
    <% if(object.someId == someValue && !found) {%>
        <%= object.name %>
        <% found = true %>
    <% } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

ata*_*man 5

这不是一个与 EJS 相关的问题。

break语句终止当前循环。当你不在循环内时。您位于回调函数内,每个数组元素由方法调用forEach一次。无法中断 forEach(请参阅如何像调用 break 一样短路 Array.forEach?)。但是,如果您需要它,您可以使用for循环来获得干净的解决方案:

<% for (var l = objects.length, i = 0; i < l; i++) { %>
    <% object = objects[i]%>
    <% if(object.someId == someValue) {%>
        <%= object.name %>
        <% break %> <!-- This will work as expected -->
    <% } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)