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