假设您有两个阵列 - 标题和内容
标题将包含1,2或3个字符串。
content 将包含3个,6个或9个字符串。
我需要遍历这些数组。 我试图得到的输出:
Headline1
Content1
Content2
Content3
Headline2
Content4
Content5
Content6
Headline3
Content7
Content8
Content9
这个嵌套循环不起作用,因为它将每个内容放在每个标题下面。
headline = ["Headline1", "Headline2", "Headline3"];
content = ["Content1", "Content2", "Content3",
"Content4", "Content5", "Content6",
"Content7", "Content8", "Content9"];
for(var i = 0; i < headline.length; i++){
console.log(headline[i]);
for(var j = 0; j < content.length; j++){
console.log(content[j]);
}
}
我从表单中获取字符串,然后将它们推入数组中 数组的长度取决于用户希望使用的字段数 关于如何解决这个问题的任何建议?
答案 0 :(得分:2)
内循环应该只循环3次,而不是所有content.length
循环。要在内容中获取相应的条目,请使用i*3+j
。
headline = ["Headline1", "Headline2", "Headline3"];
content = ["Content1", "Content2", "Content3",
"Content4", "Content5", "Content6",
"Content7", "Content8", "Content9"
];
for (var i = 0; i < headline.length; i++) {
console.log(headline[i]);
for (var j = 0; j < 3; j++) {
console.log(content[i * 3 + j]);
}
}
答案 1 :(得分:1)
您错过了一些有价值的信息。你需要知道有多少&#34;内容&#34;你放在每个&#34;标题&#34;下面。根据您提供的数据,如果它可以是1,2或3,则无法确定。
当你收到内容时你需要做的是做一个数组(或其他一些结构)数组来组合正确的字段。
var headline = ["Headline1", "Headline2", "Headline3"];
var content = [["Content1", "Content2", "Content3"],
["Content4", "Content5", "Content6"],
["Content7", "Content8", "Content9"]];
注意额外的[]
分组内容对。
在那之后,它相当琐碎。
for(var i = 0; i < headline.length; i++){
console.log(headline[i]);
for(var j = 0; j < content[i].length; j++){
console.log(content[i][j]);
}
}
注意到我们现在正在使用content[i].length
代替content.length
和content[i][j]
代替console.log
,而不只是content[j]
。
对于每个标题-n,我们获取第n组内容并循环遍历这些内容。
顺便说一下,出于性能考虑,最好将长度保存到循环中的变量中:
for(var i = 0, iLen = headline.length; i < iLen; i++) {
console.log(headline[i]);
for (var j = 0, jLen = content[i].length; j < jLen; j++) {
console.log(content[i][j]);
}
}
这样做可以避免对长度进行大量检查,这可以对大量结果产生影响。
答案 2 :(得分:0)
您可以使用单个循环并根据内容和标题长度获取标题。
var headline = ["Headline1", "Headline2", "Headline3"],
content = ["Content1", "Content2", "Content3", "Content4", "Content5", "Content6", "Content7", "Content8", "Content9"],
l = Math.floor(content.length / headline.length);
content.forEach(function (a, i) {
if (!(i % l) ) {
console.log(headline[Math.floor(i / l)]);
}
console.log(a);
});
答案 3 :(得分:0)
我建议将数据重新排列为对象数组,例如:
headlines = [
{
title: 'Headline1',
contents: [
"Content1",
"Content2",
"Content3"
]
},{
title: 'Headline2',
contents: [
"Content4",
"Content5",
"Content6"
]
},
{ ... }
];
如果由于某些原因无法执行此操作,则以下循环应该有效:
headline = ["Headline1", "Headline2", "Headline3"];
content = ["Content1", "Content2", "Content3",
"Content4", "Content5", "Content6",
"Content7", "Content8", "Content9"];
for(var i=0, l=headline.length; i<l; i++){
console.log(headline[i]);
for(var j=i*3; j<3*i+3; j++){
console.log(content[j]);
}
}
干杯!
答案 4 :(得分:0)
这是一个简单的程序化解决方案:
var j=0,k=1;
var iter=content.length/headline.length;
for(var i=0;i<iter;i++){
console.log(headline[i]);
for(;j<headline.length*k;j++){
console.log(content[j]);
}
k+=1;
}
请参阅在控制台上工作:https://jsfiddle.net/7un047q6/
答案 5 :(得分:0)
另一种方法可能是......
var headline = ["Headline1", "Headline2", "Headline3"],
content = ["Content1", "Content2", "Content3", "Content4", "Content5", "Content6", "Content7", "Content8", "Content9"],
result = headline.reduce((p,h,i) => [...p,h,...content.slice(i*3,i*3+3)],[]);
console.log(result);