簡體   English   中英

Javascript | 拼接從數組中刪除錯誤的項目

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

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