2009-10-05 6 views
11

Jak przenieść tablicę elementów o 4 miejsca w JavaScript?Jak przesunąć tablicę elementów o 4 miejsca w JavaScript

Mam następującą tablicę ciągów:

var array1 = ["t0","t1","t2","t3","t4","t5"]; 

Potrzebuję funkcja Convert "array1", aby spowodować:

// Note how "t0" moves to the fourth position for example 
var array2 = ["t3","t4","t5","t0","t1","t2"]; 

z góry dzięki.

+3

ten obraca się, nie przesuwa – Peter

+0

różne słowa, sam wynik –

+0

+1 Peter b/c Myślę, że jest to przypadek, w którym precyzja (za pomocą poprawnego słowa) jest ważna. Array.shift() już definiuje znaczenie przesunięcia tablicy w kontekście JavaScript. To powiedziawszy, tutaj jest funkcja JS do obracania tablicy. http://stackoverflow.com/a/1985471/740639 –

Odpowiedz

25
array1 = array1.concat(array1.splice(0,3)); 

uruchom następujące w Firebug, aby zweryfikować

var array1 = ["t0","t1","t2","t3","t4","t5"]; 
console.log(array1); 
array1 = array1.concat(array1.splice(0,3)); 
console.log(array1); 

skutkuje

["t0", "t1", "t2", "t3", "t4", "t5"] 
["t3", "t4", "t5", "t0", "t1", "t2"] 
+0

Och, bardzo miło. :) –

+2

jako funkcja- 'function reorderArray (arr, startIndex, howMany) {return arr.concat (arr.splice (startIndex, howMany)); } 'potrzebowałoby również sprawdzania błędów :) –

+1

Pamiętaj, że Array.concat() tworzy zupełnie nową tablicę używając elementów z tablic źródłowych. Moot dla małych tablic, ale coś do rozważenia. –

12

Można slice tablicę, a następnie join to w odwrotnej kolejności:

var array2 = array1.slice(3).concat(array1.slice(0, 3)); 
+1

To jest ładne i zwięzłe. Jeśli masz zamiar robić to często i trzeba przesunąć go o różne kwoty, możesz umieścić to w funkcji i przekazać zmienną do podłączenia tam, gdzie jest 3. (Używam słowa "shift" z wahaniem, ponieważ jest to również metoda tablicy JavaScript). –

+0

Tak, to jest moja ulubiona odpowiedź, miło! –

+0

To jest świetne, ponieważ nie modyfikuje tablicy1. – tjklemz

2

Jeszcze jeden sposób byłoby to:

var array2 = array1.slice(0); 

for (var i = 0; i < 3; i++) { 
    array2.push(array2.shift()); 
} 
2
function shiftArray(theArray, times) { 
    // roll over when longer than length 
    times = times % theArray.length; 
    var newArray = theArray.slice(times); 
    newArray = newArray.concat(theArray.slice(0, times)); 
    return newArray; 
} 

var array1 = ["t0","t1","t2","t3","t4","t5"]; 
var array2 = shiftArray(array1, 3); 
alert(array2); // ["t3","t4","t5","t0","t1","t2"] 
0

Innym sposobem - wklej następujący kod w dużej konsoli Firebug, aby potwierdzić to działa:

var a = [0, 1, 2, 3, 4, 5]; 
for (var i = 0; i < 3; i++) { 
    a.unshift(a.pop()); 
} 
// the next line is to show it in the Firebug console; variable "a" holds the array 
a.toString(","); 
+0

Końcowym rezultatem powinna być tablica, a nie ciąg, prawda? –

+0

@Nathan: wynik końcowy * jest * tablicą przechowywaną w zmiennej "a"; linia wyprowadzająca go jako ciąg ma charakter poglądowy, dlatego nie jest do niego przypisana (przechodzi bezpośrednio do konsoli w Firebug). Poprawię moją odpowiedź, aby było jasne, że mam na myśli konsolę Firebug ... czasami zapominam, że nie jest ona wbudowana w przeglądarkę ;-) – NickFitz

Powiązane problemy