要調用與arr
作爲參數的函數,因此這兩個arr
和array
指的是函數內的同一個數組。這意味着,該代碼不一樣:
var arr = ["a","b","c","d","e","f"]
var arr2 = []
var arrLength = arr.length;
for (i = 0; i < arrLength; i++) {
arr2.push(arr.pop())
arr.push(arr2.shift())
}
第一個語句從arr
得到最後一個項目和arr2
最後一個名額了。現在您有:
arr = ["a","b","c","d","e"]
arr2 = ["f"]
第二條語句從arr2
獲得第一(也是唯一一個)項目,並把它最後在arr
:
arr = ["a","b","c","d","e","f"]
arr2 = []
現在你回到開始的地方,同樣的事情發生在循環中的所有迭代中。最終的結果是沒有任何改變。
要使用pop
和push
放置其他數組中顛倒的項目,你可以簡單地移動項目,直到數組爲空:
while (arr.length > 0) {
arr2.push(arr.pop());
}
如果你想將它們移動回(而不是隻是用新的數組)的,你用shift
擺脫的arr2
和push
開始項目投入他們在arr
末:
while (arr2.length > 0) {
arr.push(arr2.shift());
}
通常不會使用堆棧/隊列操作完成反轉,只需將項目從頭開始與結束項目交換即可。這是快了很多,而且你不需要另一個數組作爲緩衝區:
for (var i = 0, j = arr.length - 1; i < j; i++, j--) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
這是交換對這樣的:
["a","b","c","d","e"]
| | | |
| +-------+ |
+---------------+
也,JavaScript的已經有一個內置的就地陣列反向 – chiliNUT
做一個陣列練習,規定我不能使用這些方法。我試圖使用push,pop,shift,unshift函數 – Sefton419
https://en.wikipedia.org/wiki/In-place_algorithm –