2016-08-26 2 views
-3

Мне нужно повторить массив в режиме цикла. Таким образом:Повторить массив в javascript

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; E

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>'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul id="ul"></ul>

Но я не могу повторить. Я хотел бы понять метод использования, потому что мой настоящий сопо и создать календарь со сдвигами. На практике, как только вы устанавливаете дату начала, массив должен быть повторен в календаре. Пример:

массив = (А, В, С, D, Е):

  • 26.08.2016
  • 27/08/2016 В
  • 28.8.2016 С
  • 29.08 0,2016 D
  • 08.30.2016 Е
  • 08.31.2016
  • 01/09/2016 В
  • 09/02/2016 C
  • 09.03.2016 D
  • 09.04.2016 E

Example Image

Я надеюсь, что вы получите эту идею, и у вас есть несколько советов для меня.

спасибо

пример PHP скрипт

\t $data = '03/10/2014'; 
 
\t $turni = array('sera','pomeriggio','Mattina','Notte','Riposo'); 
 

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

 
\t $numero_turni = 10; 
 

 
\t $n = count($turni); 
 
\t for($i=0; $i<$numero_turni; $i++){ 
 
\t \t echo $data.' '.$turni[$i%$n]."<br />\n"; 
 
\t \t $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 
 
\t $mm = 2; 
 
\t $gg = $n_g_q_mese = 29; 
 
} 
 
else{ 
 
\t $n_g_q_mese = $n_g_mesi[$mm]; 
 
\t if($mm==1) 
 
\t \t $aa++; 
 
} 
 
} 
 
\t \t $data = str_pad($gg,2,'0',STR_PAD_LEFT).'/'.str_pad($mm,2,'0',STR_PAD_LEFT).'/'.$aa; 
 
\t }

+0

Так петля над ним снова? – epascarello

+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]); 
    } 
} 

или Петлевые число раз, и используют Modulus, основанный на длине или массива.

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

Второй пример идеален. Но теперь, чтобы соответствовать буквам на дату, как я могу это сделать? Я сделал с php, но с javascript непрактичны, может быть, вы можете взять реплику? – Sixdas

+1

Я понятия не имею, как письма соответствуют дате. – epascarello

+0

буквы должны быть добавлены к датам. Я поставил свой первый пост, который я сделал в php-скрипте. – Sixdas

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>

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 на количество циклов, в течение которых вы хотите его зацикливать.

0

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

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

0

Вы можете использовать по модулю и map над сбором #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>

+0

Ваш пример останавливается на 31 месяце, однако я бы хотел, чтобы он продолжался. На практике сценарий будет использоваться для делового поворота. Таким образом, нетронутый по дате вставка может видеть, что сдвиг s ​​ждет на определенную дату. – Sixdas

+0

@Sixdas Получите все ваши '# ul' в коллекцию, затем перейдите по коллекции и примените модуль. Пример показан выше. –

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>

Смежные вопросы