簡體   English   中英

javascript Array.splice()什么都不做

[英]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)對數組不執行任何操作……我被設置為某個值。 我只想從符文數組中刪除不活動的符文。 有任何想法嗎?

你有兩個問題。

首先,在調用onDeactivatei將達到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM