2015-10-19 96 views
2

我想弄清楚爲什麼下面的一段代碼只彈出最後3個數組而不是最後兩個。在Javascript中彈出數組for循環沒有獲取所有數組項目

var test = ['test1','test2','test3','test4','test5']; 

console.log('length - '+test.length); 

for(var k = 0; k <= test.length; k++) { 
    var tests = test.pop(); 
    console.log(tests+' - '+k); 
} 

對於上述代碼的結果:

length - 5 
(index):30 test5 - 0 
(index):30 test4 - 1 
(index):30 test3 - 2 

回答

2

Array.prototype.pop方法修改原始陣列,所以當然for循環將只訪問一半的值,直到陣列完全排空。

你可以做的是使用while循環,而不是:

var test = ['test1', 'test2', 'test3', 'test4', 'test5']; 
 

 
console.log('length - ' + test.length); 
 

 
while (test.length) { 
 
    var tests = test.pop(); 
 
    console.log(tests); 
 
}

2

的問題是,數組的長度變化而循環執行,所以測試
k <= test.length隨着每次執行而改變。

var test = ['test1','test2','test3','test4','test5']; 
 

 
console.log('length - '+test.length); 
 

 
for (var k = 0, len = test.length; k < len; k++) { 
 
    var tests = test.pop(); 
 
    console.log(tests+' - '+k); 
 
}

或者用while循環:

var test = ['test1','test2','test3','test4','test5']; 
 

 
console.log('length - '+test.length); 
 

 
var k = 0; 
 
while (test.length) { 
 
    var tests = test.pop(); 
 
    console.log(tests+' - '+(k++)); 
 
}

1

你增加每次k。打印完2,k == 3,同時列表中仍有2個元素。但由於k > test.length,循環結束。

如果你真的仍想保留數量,增加k但不要測試:

var test = ['test1', 'test2', 'test3', 'test4', 'test5']; 
 

 
console.log('length - ' + test.length); 
 

 
for (var k = 0; test.length > 0; k++) { 
 
    var tests = test.pop(); 
 
    console.log(tests + ' - ' + k); 
 
}

1

考慮的你在做什麼邏輯......你兩端燃燒蠟燭(可以這麼說)。

K = 0,在這一點TEST5長度= 5( 'TEST1') 被丟棄(這是彈出確實,it drops the last element

K = 1,長度= 4( 'TEST2')(在這點test4被扔掉)

等等...... 3次迭代後你的數組是3項。

I *想你想你會與splice

while(myArray.length > 0){ 
    console.log(myArray[0]) 
    myArray.splice(0,1) 

} 
0

完成,如果你想保持你的代碼風格,只是增加以下行。這是爲了防止在數組的長度大小調整爲循環:

var arrSize = test.length; 

你的最終代碼應該是這樣的:

<script> 
    var test = ['test1', 'test2', 'test3', 'test4', 'test5']; 

    var arrSize = test.length; 

    console.log('length - ' + arrSize); 

    for (var k = 0; k < arrSize; k++) { 
     var tests = test.pop(); 
     console.log(tests + ' - ' + k); 
    } 
</script> 
相關問題