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