簡體   English   中英

從Firebase提取數據后從數組中刪除元素

[英]Removing elements from array after pulling data from firebase

我正在將對象從Firebase中拉出,將其轉換為數組,然后對其執行移除元素操作,但是有一些奇怪的行為:

this.players = this.db.object('arena/players').valueChanges();
  this.players.subscribe(players =>{
console.log(players);
    this.playersarray= Object.keys(players).map(key => ({ key, value: players[key] }));
    console.log(this.playersarray);
    console.log(this.playersarray.length);

    for(var i =0;i<this.playersarray.length;i++){

        if(this.playersarray[i].value != "waiting"){
          console.log(this.playersarray[i].value+"deleting");
          this.playersarray.splice(i,1);
        }

    }


console.log(this.playersarray);


  });

這是控制台: 在此處輸入圖片說明

我正在嘗試刪除不等於waiting.value的元素,因此在這種情況下,im希望刪除engincan,lifesuxtr並僅以someotheruser,someuser的身份獲取last console.log,但lifesuxtr並沒有被刪除? 僅將engincan移除?

您可以使用Array.filter運算符遍歷Array並過濾相關結果,例如:

 const arr = [1, 2, 3, 4, 5]; const result = arr.filter((item) => item % 2 === 1); console.log(result); 

當您從數組中刪除項目時,以下所有項目的索引都會下移。 由於要刪除項目,因此循環會跳過項目。

// Array starts as:
//   0    1    2    3
// ['a', 'b', 'c', 'd']

// Loop 1: Index 0, item 'a'. Matches test, remove it.

// Array becomes:
//   0    1    2
// ['b', 'c', 'd']

// Loop 2: Index 1, item 'c'. 
// Loop 3: Index 2, item 'd'.

最快的解決辦法是通過從索引中減去一個來更改索引,但這很難快速跟蹤。 我建議使用Array.filter()方法。

this.playersarray = this.playersarray.filter(function(player) {
  return player.value != 'waiting'
})

按值刪除數組元素的簡單方法。

var playersarray = {
    "name": "John",
    "age": 30,
    "cars": "Ford"
};

for(value in playersarray){
  if(playersarray[value] != "Ford"){
    delete playersarray[value]; //deleting array elements if no 'Ford'

  }
}
console.log(playersarray);

Output: {cars:"Ford"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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