[英]javascript Array.splice() does nothing
我的更新函數中有以下代碼,每秒被調用30次:
// Checking collision between rune and the players:
for(var j = 0; j < this.players.length; j++) {
if(this.checkCollision(this.players[j], this.runes[i])) {
this.runes[i].activate(this.players[j]);
this.runes[i].isHidden = true;
this.runes[i].onDeactivate = function() {
console.log(i);
self.runes.splice(i, 1);
}
}
}
在此之前,我有:
for(var i = 0; i < this.runes.length; i++) ...
self.runes.splice(i,1)對數組不執行任何操作……我被設置為某個值。 我只想從符文數組中刪除不活動的符文。 有任何想法嗎?
你有兩個問題。
首先,在調用onDeactivate
, i
將達到this.runes.length
,這就是您將在console.log(i)
調用中看到的內容。 解決該問題的經典解決方法是:
(function(i) {
// code that relies on i
})(i);
這實際上將“鎖定”該閉包內容的i
值。
第二個問題是, splice
會修改陣列,而您對此並不滿意。 假設您有以下三種符文:
[rune_0, rune_1, rune_2]
現在說rune_1
被停用,因此調用代碼splice(1,1)
將其刪除。 現在,您的數組如下所示:
[rune_0, rune_2]
現在rune_2
被停用,因此調用了splice(2,1)
。 那從數組中刪除了[2]
元素...但是再也沒有了。
[rune_0, rune_2]
符文仍然在那里。
要從陣列中刪除符文,可以執行以下操作:
this.runes = this.runes.filter(function(rune) {return rune !== toremove;});
要toremove
的符文在哪里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.