我正在尝试使用.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'
}
]
如果我在用户引用deleteUser(user)
的情况下呼叫John Doe
,则输出将为:
[
{
id: 1,
name: 'John Doe'
}
]
与之相反,应该删除John Doe并保留Jane Doe。
答案 0 :(得分:2)
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);