此代碼只打印數字,直到3時,它應該打印數字,直到5,有什麼不對?代碼打印數字直到3時,它應該打印,直到5
function reversingwithout (array){
for(var i=0;i<array.length;i++){
var old = array.shift(array[i])
console.log(old);
}
}
var hh = [1,2,3,4,5];
reversingwithout(hh);
此代碼只打印數字,直到3時,它應該打印數字,直到5,有什麼不對?代碼打印數字直到3時,它應該打印,直到5
function reversingwithout (array){
for(var i=0;i<array.length;i++){
var old = array.shift(array[i])
console.log(old);
}
}
var hh = [1,2,3,4,5];
reversingwithout(hh);
這是因爲array.shift
操作正在改變循環內的數組。
移位()方法從陣列中移除的第一個元素,並返回 該元素。此方法更改數組的長度。
嘗試保存數組長度在一個變量中預先:
var hh = [1,2,3,4,5];
var length = hh.length;
function reversingwithout (array){
for(var i=0;i<length;i++){
var old = array.shift()
console.log(old);
}
}
reversingwithout(hh);
還要注意,array.shift
不需要參數。
JSBin:https://jsbin.com/paleyifija/1/edit?html,console,output
見循環條件的迭代中如何變化:
i == 0
,array.length == 5
。 OKi == 1
,array.length == 4
。好吧i == 2
,array.length == 3
。好吧i == 3
,array.length == 2
。 End loop我想你誤會了shift
。如果你只想打印所有項目,只是像做
for(var i=0; i<array.length; ++i) console.log(array[i]);
的shift()方法刪除數組的第一個元素並返回該元素。此方法更改數組的長度。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
的array.length
值每個的環路保護檢查時間計算的。當調用Array.shift()
時,循環體從數組中刪除一個元素,從而減少數組的長度。因此,在循環退出時,i == 3
和array.length == 2
。
可以通過在變量存儲array.length
的初始值,並使用該變量中的環路保護,而不是解決這個問題。
例如
var len = array.length;
for (var i = 0; i < len; i++) { ...
'Array.prototype.shift'不帶任何參數。 – MinusFour
提示:當你使用shift()方法時,你正從數組中移除元素。 –