[英]Javascript | Splice removing the wrong item from array
我正在嘗試使用.splice
從Angular中的數組中刪除項目。
該數組實際上是一個BehaviourSubject
因此在其他組件中,我可以監視更改並通過應用程序反映出來。
我有一種方法可以從行為主體當前獲取所有用戶...
getUsers(): UIUser[] {
return this.users$.getValue();
}
如您所見,它實際上只是返回給定時間的行為主體的值。
我原本以為這個問題是因為getUsers
方法可能在我出於某種原因甚至沒有完成該方法之前就在更改,所以我對其進行了克隆,但仍得到相同的結果,這是刪除了錯誤的項目。
我有辦法
deleteUser(deletedUser: User): void {
const users: User[] = this.getUsers();
const index: number = users.findIndex(user => {
return user.id === deletedUser.id;
});
this.setUsers(users.splice(index, 1));
}
由於某種原因,這會從數組中刪除錯誤的項目。
setUsers
方法只是這樣做:
setUsers(Users: User[]): void {
this.users$.next(users);
}
樣本數據:
[
{
id: 1,
name: 'John Doe'
},
{
id: 2,
name: 'Jane Doe'
}
]
如果我通過引用John Doe
的用戶調用deleteUser(user)
,輸出將是:
[
{
id: 1,
name: 'John Doe'
}
]
與此相反,應該刪除John Doe並保留Jane Doe。
splice()返回從數組中刪除的元素,而不是修改后的數組。 原始數組將被原位變異
例如:
var temp = [2,4,8,16];
var ret = temp.splice(1,2);
console.log(ret); //logs [4,8]
console.log(temp); //logs [2,16]
只需單獨調用拼接,然后將users
傳遞給您的設置者
users.splice(index,1);
setUsers(users);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.