2013-07-05 18 views
9

Ho una matrice come [A,B,C,D]. Voglio accedere a tale matrice all'interno di un ciclo for come comeCome accedere alla matrice in modo circolare in javascript

var arr = [A,B,C,D]; 

var len = arr.len; 
for(var i = 0;i<arr.len;i++){ 
0 - A,B,C 
1 - B,C,D 
2 - C,D,A 
3 - D,A,B 
} 

voglio accedere poi in quel modo in javascript, qualche idea?

risposta

12

Prova questa:

var arr = ["A","B","C","D"]; 
for (var i=0, len=arr.length; i<len; i++) { 
    alert(arr.slice(0, 3).join(",")); 
    arr.push(arr.shift()); 
} 

Senza mutare la matrice, sarebbe

for (var i=0, len=arr.length; i<len; i++) { 
    var str = arr[i]; 
    for (var j=1; j<3; j++) 
     str += ","+arr[(i+j)%len]; // you could push to an array as well 
    alert(str); 
} 
// or 
for (var i=0, len=arr.length; i<len; i++) 
    alert(arr.slice(i, i+3).concat(arr.slice(0, Math.max(i+3-len, 0)).join(",")); 
+0

+1 bella soluzione (meglio di quello che stavo per inviare :)) – Ben

+0

@Bergi grazie, il suo funzionamento – Anshul

3
for (var i = 0; i < arr.length; i++) { 
    var subarr = []; 
    for (var j = 0; j < 3; j++) { 
     subarr.push(arr[(i+j) % arr.length]); 
    } 
    console.log(i + " - " + subarr.join(',')); 
} 
4

Semplicemente usando operatore modulo è possibile accedere a matrice in modo circolare.

for(var i=0,len=arr.length;i<len;i++){ 
    for(varj=0;j<3;j++){ 
      console.log(a[i+j]%len) 
    } 
    console.log('****') 
} 

uscita:

A B C


B C D


C D A


D Un C

0

come su questo one-liner che ho fatto?

var nextItem = (list.indexOf(currentItem) < list.length - 1) 
         ? list[list.indexOf(currentItem) + 1] : list[0];