2009-10-05 59 views
11

如何將項目數組向上移動4個位置?如何在Javascript中將4個位置的項目向上移動

我有以下字符串數組:

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

我需要一個功能轉換 「陣列1」 導致:提前

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

感謝。

+3

此旋轉時,不移位 – Peter 2009-10-05 19:59:45

+0

不同的詞,相同的結果 – 2012-05-03 13:22:13

+0

+1彼得B/C我認爲這是一個精度(使用正確的詞)_is_重要的情況。 Array.shift()已經定義了在JavaScript上下文中移動數組的含義。這就是說,這裏是一個用於旋轉數組的JS函數。 http://stackoverflow.com/a/1985471/740639 – 2013-06-25 20:57:37

回答

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

運行在Firebug以下驗證

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

導致

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

哦,非常好。 :) – 2009-10-05 16:46:36

+2

as a function-'function reorderArray(arr,startIndex,howMany){return arr.concat(arr.splice(startIndex,howMany)); }''也需要錯誤檢查:) – 2009-10-05 16:51:14

+1

請注意,Array.concat()使用源數組中的元素創建一個全新的數組。模擬小陣列,但需要考慮。 – 2013-06-25 21:02:00

12

可以slice的數組,然後join它以顛倒的次序:

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

這是很好,簡潔。如果你經常這樣做,並且需要以不同的數量來移動它,你可以把它放到一個函數中,並傳入一個變量來插入3的位置。 (我使用「shift」這個詞猶豫不決,因爲這是一個Javascript數組方法。) – 2009-10-05 16:44:38

+0

是的,這是我最喜歡的答案,很好! – 2015-08-01 08:34:09

+0

這很好,因爲它不會修改array1。 – tjklemz 2016-05-24 18:05:14

2

還有一個辦法是這樣的:

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

另一種方法 - 將以下代碼粘貼到大螢火蟲控制檯,以確認它的工作原理:

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

最終結果應該是數組而不是字符串吧? – 2009-10-05 16:51:38

+0

@Nathan:最終結果*是一個數組,保存在變量「a」中;將其輸出爲字符串的行用於說明目的,這就是爲什麼它沒有分配給任何東西(它直接在Firebug中的控制檯)。我會更正我的回答,說清楚我的意思是Firebug控制檯...有時我忘了它不是內置於瀏覽器;-) – NickFitz 2009-10-05 16:53:55

相關問題