Javascript 而循环正在复制而不是递增结果

Javascript 而循环正在复制而不是递增结果,javascript,json,Javascript,Json,我成功地显示了两个对象值之间比较的所有结果,但当我添加 while (l++ < 12) { Do Something } 问题是while循环复制了我的结果,而不是增加它们 for (var i = 0 ; i < data.nav1.length; i++) { navigationLevel = data.nav1[i]; var navigationSubLevel = navigationLevel.subcategories; <secti

我成功地显示了两个对象值之间比较的所有结果,但当我添加

while (l++ < 12) {
    Do Something
}
问题是while循环复制了我的结果,而不是增加它们

for (var i = 0 ; i < data.nav1.length; i++) {
navigationLevel = data.nav1[i];
    var navigationSubLevel = navigationLevel.subcategories;
    <section>
        if ( navigationLevel.hasOwnProperty("subcategories") ) {
            <ul>
                for (j = 0; j < navigationSubLevel.length; j++) {
                    <li>Do something..</li>
                }
            </ul>
            for (k = 0; k < navigationSubLevel.length; k++) {
                var thisArticleContainerSlug = navigationSubLevel[k].subcategoryslug;
                <div>
                    for (l = 0; l < data.articles.length; l++) {
                        var thisArticleSlug = data.articles[l];
                        while (l++ < 12) { <----- This is where I am adding the while loop
                            if ( thisArticleContainerSlug === thisArticleSlug.subcategoryslug ) {
                                <article>
                                    Do Something
                                </article>
                            }
                        } <------ This where it closes
                    }
                </div>
            }
        }
    </section>
}
for(var i=0;i
对于(j=0;j做点什么
}

对于(k=0;k而(l++<12){如果我只考虑代码中最重要的部分:(我重新添加了EJS标记,因为它们很有用,但是请注意,您可以使用EJS生成多行Javascript代码)

但我发现使用ES5/ES6样式更好(EJS中的所有代码都与node一起工作,因此不存在可能的旧浏览器不兼容)

thisArticleContainerSlug===thisArticleSlug.SubCategory Slug)
.slice(0,12).forEach(thisArticleSlug=>{%>

请注意,这可能并不完全是您想要做的,因为在问题“最终目标是什么”中没有明确说明。

我自己解决了这个问题,但为了简洁起见,以及其他有这个问题的人,我在下面添加了解决方案

谢谢@James提供种子

怎么了。。。 正如@James指出的,我每次都使用while循环迭代相同的data.articles结构

解决方案是在for循环外部和if语句内部创建一个等于0的变量,创建第二个具有迭代次数限制的if语句,并在if语句内部递增该变量

<% var ifStatementIterationLimit = 0; %>
for (l = 0; l < data.articles.length; l++) {
    var thisArticleSlug = data.articles[l];
    if ( thisArticleContainerSlug === thisArticleSlug.subcategoryslug ) {
        <% if (ifStatementIterationLimit < 12) { %>
            <article>
                Do Something
            </article>
            <% ifStatementIterationLimit ++; %>
        }
    }
}

对于(l=0;l
感谢@Felix Brunet尝试解决方案


我希望这对将来的其他人有所帮助=]

请显示您在代码中添加while循环的代码,这样我们就不必猜测了。并删除所有不相关的、令人困惑的
这似乎不仅仅是JavaScript。您能指出正在使用的HTML模板语言吗?看起来您需要迭代每次进入
L
循环时,都会生成相同的
数据。文章结构。我希望每次循环运行时都会得到相同的结果,即重复。请同时指出
的位置(L++<12){
block建议添加到较大的代码段中。Felix Brunet感谢您的回复,当我添加&&l<12时,它现在只显示它找到的第一个结果,这同样适用于slice(0,12)。基本上,我是比较导航子类别和文章中的子类别的值,并通过if语句thisArticleContainerSlug==thisArticleSlug.Subcategory Slug显示结果。但是当我尝试使用while循环限制结果时,它会复制结果,而不是增加结果。Felix Brunet我有一个lso尝试在if语句中移动while循环,结果保持不变。Felix Brunet感谢多行提示,这将节省大量输入。我编辑了我的答案,但没有看到您已经找到自己想要的内容。
<% for (l = 0; l < data.articles.length; l++) {
    var thisArticleSlug = data.articles[l];
    while (l++ < 12) { <----- This is where I am adding the while loop
         if ( thisArticleContainerSlug === thisArticleSlug.subcategoryslug ) {%>
              <article>
                    <%Do Something%>
              </article>
         <%}
    } <------ This where it closes
}%>
<% for (let l = 0, goodArticle = 0; l < data.articles.length && goodArticle < 12; l++) {
     var thisArticleSlug = data.articles[l];
     if ( thisArticleContainerSlug === thisArticleSlug.subcategoryslug ) {
          goodArticle++;%>
          <article>
                <%Do Something%>
          </article>
     <%}
}%>
<% data.articles
    .filter(thisArticleSlug => thisArticleContainerSlug === thisArticleSlug.subcategoryslug )
    .slice(0, 12).forEach(thisArticleSlug  => {%>
          <article>
                <%Do Something%>
          </article>
<%})%>
<% var ifStatementIterationLimit = 0; %>
for (l = 0; l < data.articles.length; l++) {
    var thisArticleSlug = data.articles[l];
    if ( thisArticleContainerSlug === thisArticleSlug.subcategoryslug ) {
        <% if (ifStatementIterationLimit < 12) { %>
            <article>
                Do Something
            </article>
            <% ifStatementIterationLimit ++; %>
        }
    }
}