繁体   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