我有一个二维数组(affiliates
),其中每个数组项都包含一个图像URL和一个链接URL。 randArray
只是一个生成的随机数列表(非重复),与affiliates
的长度相匹配。
我已经达到了可以为随机图像/网址组合成功生成HTML字符串的程度。
(以上可能是比需要更多的信息,但我想提供一些背景知识。)
我要做的是将每三次迭代分组并包装在<p>
标签中。我已经尝试在当前的一个内部执行嵌套循环,但只能到达<p>
标记中包含三个相同行的位置,而我需要它们连续三个线。我觉得这应该很容易,但我很难过。任何帮助将非常感激。
for(var y=0; y < randArray.length; y++) {
var image = affiliates[randArray[y]][0];
var url = affiliates[randArray[y]][1];
var fullString = '<a href="' + url + '"><img src="' + image + '"></a>';
console.log(fullString);
}
答案 0 :(得分:2)
在你的循环中,y % 3 == 0
将在第一次迭代时为真,并且在其后的每三次都是如此,因此在<p>
时输出y % 3 == 0
,在{{1}时输出</p>
如果是y % 3 == 2
,那么在你的循环之后。
但嵌套循环可能更容易做和维护:
length % 3 != 0
答案 1 :(得分:1)
for(var y=0; y < randArray.length; y++) {
var image = affiliates[randArray[y]][0];
var url = affiliates[randArray[y]][1];
var fullString = '';
if(y%3 == 2){
fullString += '<p>';
}
fullString = '<a href="' + url + '"><img src="' + image + '"></a>';
if(y%3 == 2){
fullString += '</p>';
}
console.log(fullString);
}
答案 2 :(得分:1)
我不确定我是否理解,但......
var t = [];
for(var i=0;i<affiliates.length;i++) t.push(i);
while(t.length>2){
var str = '';
for(var i=0;i<3;i++){
str += '<a href="';
var r = Math.floor(Math.random()*t.length);
str += affiliates[t[r]][1] + '"><img src="';
str += affiliates[t[r]][0] + '"></a>';
t.splice(r,1);
}
str = '<p>'+str+'</p>';
console.log(str);
}
答案 3 :(得分:0)
我会做这样的事情,但它不是优化代码,对不起:/
var counter = 1; //external counter for module (%3)
var open = false;
var tagOpen = '<p>';
var tagClose = '</p>';
var fullstring = '';
var buffer = ''
for(var y=0; y < randArray.length; y++) {
var image = affiliates[randArray[y]][0];
var url = affiliates[randArray[y]][1];
//groups entries
buffer += '<a href="' + url + '"><img src="' + image + '"></a>';
if(counter % 3 == 0){
fullstring = tagOpen + buffer + tagClose; //concat strings
console.log(fullString);
open = false; //set open to false
} else {
open = true;
}
counter++;
}
//if at the end of the loop there's still an open tag, close it
if(open){
fullstring += tagClose;
}