Javascript 如何停止forEach()循环以仅显示一次错误消息?

Javascript 如何停止forEach()循环以仅显示一次错误消息?,javascript,html,ejs,Javascript,Html,Ejs,我创建了一个允许用户创建和添加事件的网站,现在我添加了一个搜索,用户可以通过不同的事件进行搜索,问题是当搜索的事件不存在时,它应该记录一条错误消息,说明找不到任何事件,但此消息会根据当前存在的事件数量显示多次,而不是因为forEach方法而只显示一次。如果找不到具有该名称的事件,应如何使其工作并仅显示一次错误消息 search.ejs <div class="container"> <header class="jumbotron" style="padding-le

我创建了一个允许用户创建和添加事件的网站,现在我添加了一个搜索,用户可以通过不同的事件进行搜索,问题是当搜索的事件不存在时,它应该记录一条错误消息,说明找不到任何事件,但此消息会根据当前存在的事件数量显示多次,而不是因为forEach方法而只显示一次。如果找不到具有该名称的事件,应如何使其工作并仅显示一次错误消息

search.ejs


<div class="container">
    <header class="jumbotron" style="padding-left: 0px; padding-top: 5px; padding-bottom: 5px;">
       <h2>Search Results:</h2>
    </header>
   <!-- <% console.log(search_event)%> -->
   <div class="row text-center">

        <% events.forEach(function(i){ %>

          <% if(i.name.includes(search_event)) { %>

         <div class="col-md-3 col-sm-6">                                              <!--Double cols to make the site responsive and mobile compatible-->
          <div class="thumbnail">
            <img src=" <%= i.image %>">
            <div class="caption">
              <h4> <%= i.name%> </h4> 
            </div>
            <p>
              <a href="/events/<%= i._id %>" class="btn btn-primary">More Info</a>
            </p>
          </div>
        </div>

        <% } else  { %>

           <h4> No such event exists </h4>
          <% } %>
       <% });%>

    </div>
</div>
<% include partials/footer  %>

只要挂一面旗就行了。并检查是否存在。如果打印一次,它将不允许输入

搜索结果: -> >

不存在此类事件
您应该使用Array.prototype.filter预先计算将显示多少项

如果此数组具有长度,则应迭代并显示它们。如果没有长度,则不显示结果


实际上,您可以使用直接css来实现这一点,并将no results设置为display:none,但是如果前一行为空,则有一个样式规则来显示它

我已经在每一行中添加了类名-搜索结果和无结果。然后使用:empty伪选择器和+direct同级组合器简单地切换显示状态

.没有结果{ 显示:无; } .搜索结果包装:空+。无结果包装{ 显示:块; } 搜索结果: -> >

不存在此类事件
可能的副本。在这个答案中,您可以找到停止forEach的方法。我已经完成了,但它没有解决您无法停止forEach的问题-它对数组中的每个元素运行一次。这就是它的工作原理。如果您需要迭代并提前退出,请使用循环。我尝试使用for循环,但它不适用于函数。你能告诉我怎么做吗?使用。每次返回false停止或。一些返回true停止-哦,等等,我认为这是一个javascript问题,不管是什么很酷的解决方案,但我不同意使用CSS进行逻辑。问题是你重复了两次。一次用于过滤器,然后是后续的forEach,都在一个较小的集合上。您可以将它们添加到模板变量中,并在呈现之前检查该模板是否有子级。我不担心迭代,使用JS/CSS/HTML的唯一开销是当您必须多次实际更新DOM时,请参见DevTools中的performance选项卡
var filteredEvents = events.filter(event => event.name.includes(search_event));

if (filteredEvents.length) {
 // forEach
} else {
 // no results
}