2014-01-15 47 views
0

我想操作一個for循環內的數組,我想在該數組的末尾添加一個項目,並在數組的開頭刪除一個元素,像這樣:函數shift()在循環內不起作用

var internal = new Array(); 

for(var i = 0; i < 1000; i++) { 
    internal[i] = Math.floor(Math.random() * 37); 

    internal.shift(); 
    console.log(internal.length); 
} 

的問題是,它看起來像移()循環內不工作,事實上,沒有元素從陣列中刪除!

有沒有解決方案?

這裏JsFiddle

回答

2

它每次減少一次,但每次通過訪問數組索引訪問它時,它都在增長。取而代之的

internal[i] = Math.floor(Math.random() * 37); 

使用

internal.push(Math.floor(Math.random() * 37)); 

例如,

var internal = []; 
internal[3] = "thefourtheye"; 
console.log(internal); 

輸出

[ , , , 'thefourtheye' ] 

這前三eleme做出空間nts並在指定的索引處添加該元素。所以,它會保持陣列的增長。

注:使用[]創建一個新的陣列,而不是new Array()

+0

非常感謝您! – Lughino

+0

@Laughino歡迎您:) – thefourtheye

1

,因爲你使用的是硬編碼的指標,儘量

var internal = new Array(); 

for(var i = 0; i < 1000; i++) { 
    internal.push(Math.floor(Math.random() * 37)); 

    internal.shift(); 
    console.log(internal.length); 
} 

演示:Fiddle


//test 
var arr = []; 
arr[50] = 1; 
console.log('arr.length', arr.length); 

將打印51沒有1