2009-10-05 12 views
11

Come spostare una serie di elementi di 4 posizioni in Javascript?Come spostare una serie di elementi di 4 posizioni in Javascript

Ho il seguente array di stringhe:

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

ho bisogno di un funzione di conversione "array1" di provocare:

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

Grazie in anticipo.

+3

questo è in rotazione, non spostando – Peter

+0

parole diverse, lo stesso risultato –

+0

+1 Peter b/c Penso che questo sia un caso in cui la precisione (usando la parola corretta) è importante. Array.shift() definisce già il significato di spostare una matrice nel contesto di JavaScript. Detto questo, ecco una funzione JS per la rotazione di un array. http://stackoverflow.com/a/1985471/740639 –

risposta

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

eseguire quanto segue in Firebug per verificare

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

risultati in

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

Oh, molto bello. :) –

+2

come una funzione- 'reorderArray (arr, startIndex, howMany) {return arr.concat (arr.splice (startIndex, howMany)); } 'avrebbe bisogno anche di un controllo degli errori :) –

+1

Attenzione, Array.concat() crea un intero nuovo array usando gli elementi degli array sorgente. Moot per piccoli array, ma qualcosa da considerare. –

12

È possibile slice l'array e poi join in ordine inverso:

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

Questo è bello e conciso. Se lo farai frequentemente, e dovrai spostarlo di quantità diverse, potresti metterlo in una funzione e passare una variabile per collegare dove si trova il 3. (Uso la parola "shift" con esitazione, visto che anche questo è un metodo di array Javascript.) –

+0

Sì, questa è la mia preferita delle risposte, bello! –

+0

Questo è ottimo perché non modifica array1. – tjklemz

2

Un altro modo sarebbe questo:

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

Un altro modo - incolla il seguente codice nella grande console Firebug per confermare che funziona:

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

Il risultato finale dovrebbe essere un array, non una stringa, giusto? –

+0

@Nathan: il risultato finale * è * un array, tenuto nella variabile "a"; la linea che emette come stringa è a scopo illustrativo, motivo per cui non è assegnata a nulla (va direttamente alla console in Firebug). Correggerò la mia risposta per chiarire che intendevo la console di Firebug ... a volte dimentico che non è integrata nel browser ;-) – NickFitz

Problemi correlati