2015-12-19 52 views
2

我想彈出n陣列中的對象。我得到陣列中的所有對象與數組length之間的差異。爲什麼是這樣?控制檯日誌不輸出陣列的全部內容

如果我的控制檯日誌:

console.log('Deck length', this.deck, this.deck.length);

我可以看到有37點的對象,而length是18,但this.deck.length輸出37

enter image description here

這是當我試圖彈出所有卡在陣列中重要:

var that = this; 
this.deck.forEach(function (cards, index) { 
    that.deck.pop(); 
    console.log('popping ', cards.name, index); 
}); 

我想彈出整個37卡,但它只是彈出18

console.log('Deck length after pop', this.deck, this.deck.length);

enter image description here


編輯:

試圖用常規的循環,得到了相同的結果:

for (var i = 0; i < this.deck.length; i++) { 
    var popped_card = this.deck.pop(); 
} 

而且

console.log(JSON.stringify(this.deck))給出了錯誤:

Uncaught TypeError: Converting circular structure to JSON

這是解釋here

+0

當你運行'console.log(JSON.stringify(this.deck))'時,你會看到什麼? –

+0

@Gothdo見上面 – Growler

+0

如果要從數組中彈出項目,請不要使用forEach。 – Will

回答

3

您有this.deck.length在每次循環迭代計算的問題。只要你通過陣列的一半,你的長度已經下降得足夠遠,以便循環條件(當前長度)不再是真的,並且循環中止。

你可以做什麼:

  • 商店長度突變之前和使用
  • 使用.clear()
  • 分配一個新的數組deck

變異的名單,同時通過這些循環是一般很容易出錯(在大多數情況下,只有在突變後突破循環時纔會保存)。

0

試試這個:

var ary = []; 
for(var i = 0; i < 37; i++) { 
    ary.push(i); 
} 

console.log(ary); 

for(var i = ary.length - 1; ary.length > 0; i--) { 
    console.log(ary[i]); 
    ary.pop(); 
} 
相關問題