在javascript

时间:2016-08-26 15:44:55

标签: javascript arrays

我必须在循环模式下重复一个数组。这样:

A,B; C; d; E,A,B; C; d; E,A,B; C; d; E,A,B; C; d; E,A,B; C; d; E,A,B; C; d; E,A,B; C; d; ë



var a = "A;B;C;D;E;";

var b = a.split(';');

for(var i = 0; i < b.length; i++)
{
   $('#ul').append('<li>'+ b[i] +'</li>');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="ul"></ul>
&#13;
&#13;
&#13;

但我不能重复。我想了解使用的方法因为我真正的sopo并创建一个带有班次的日历。实际上,一旦设置了开始日期,就必须在日历上重复数组。例如:

array =(A,B,C,D,E):

  • 26.08.2016 A
  • 27/08/2016 B
  • 28.8.2016 C
  • 29.08.2016 D
  • 08.30.2016 E
  • 08.31.2016 A
  • 01/09/2016 B
  • 09/02/2016 C
  • 09.03.2016 D
  • 09.04.2016 E

Example Image

我希望你能得到这个想法,并且对我有一些建议。

谢谢

示例php脚本

&#13;
&#13;
	$data = '03/10/2014';
	$turni = array('sera','pomeriggio','Mattina','Notte','Riposo');

	$n_g_mesi = array(1=>31,28,31,30,31,30,31,31,30,31,30,31);
	list($gg,$mm,$aa) = explode('/', $data);
	$gg = (int)$gg;
	$mm = (int)$mm;
	$n_g_q_mese =  $n_g_mesi[$mm];

	$numero_turni = 10;

	$n = count($turni);
	for($i=0; $i<$numero_turni; $i++){
		echo $data.' '.$turni[$i%$n]."<br />\n";
		$gg = $gg%$n_g_q_mese+1;
if($gg==1){
$mm = $mm%12+1;
if($mm==3 && $aa%4==0 && $n_g_q_mese==28){ // se l'anno è bisestile
	$mm = 2;
	$gg = $n_g_q_mese = 29;
}
else{
	$n_g_q_mese = $n_g_mesi[$mm];
	if($mm==1)
		$aa++;
}
}
		$data = str_pad($gg,2,'0',STR_PAD_LEFT).'/'.str_pad($mm,2,'0',STR_PAD_LEFT).'/'.$aa;
	}  
&#13;
&#13;
&#13;

6 个答案:

答案 0 :(得分:2)

如果您需要多次重复,而不是多次循环

嵌套循环

var b = ["A", "B", "C", "D", "E"];
for(var i=0;i<3;i++) {
    for(var j=0;j<b.length;j++) {
        console.log(b[j]);
    }
}

或循环次数并根据长度或数组使用模数。

var b = ["A", "B", "C", "D", "E"];
for(var i=0;i<20;i++) {
    console.log(b[i%b.length]);
}

答案 1 :(得分:1)

实现这一目标的最简单方法是使用嵌套循环

var a = "A;B;C;D;E";

var b = a.split(';');

var counter = 3; // number of iterations
for (var j = 0; j < counter; j++) {
  for(var i = 0; i < b.length; i++) {
     $('#ul').append('<li>'+ b[i] +'</li>');
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="ul"></ul>

答案 2 :(得分:1)

var a = "A;B;C;D;E";

var b = a.split(';');

for (var c = 0; c < 5; c++) {
for(var i = 0; i < b.length; i++)
{
   $('#ul').append('<li>'+ b[i] +'</li>');
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="ul"></ul>

只需添加一个嵌套循环。将5更改为您希望循环的次数。

答案 3 :(得分:0)

&#13;
&#13;
var a = "A;B;C;D;E;";

var b = a.split(';');
var times=5;
for(var i = 0; i < b.length; i++)
{
   $('#ul').append('<li>'+ b[i] +'</li>');
   if(i==4 && times>0)  // 4 here otherwise use b.length as in limiting array
   {
      i=0;
      times--;
    }

}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="ul" style="list-style:none"></ul>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以在map的集合上使用modulo和#ul

ARRAY[DATE % ARRAY.length]将返回数组中的下一个序列,并在它到达结束时从0开始。

在下面的示例中,我使用idx来确定字母,但您可以从ul对象中的某个标识符中提取它。

var a = "A;B;C;D;E";

var b = a.split(';');

array_of_uls.map(function(ul, idx)
    {
       ul.append('<li>'+ b[idx % b.length] +'</li>');
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="ul"></ul>

答案 5 :(得分:0)

我会按照以下方式完成这项工作;

var str = "A;B;C;D;E;";

myList.appendChild(str.repeat(5)
                      .split(";")
                      .slice(0,-1)
                      .reduce((frag,text) => {var myLi = document.createElement("li");
                                              myLi.textContent = text;
                                              frag.appendChild(myLi);
                                              return frag;
                                             }, document.createDocumentFragment()));
<ul id="myList"></ul>