[英]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.