Javascript |拼接从数组中删除错误的项目

时间:2019-05-19 07:41:13

标签: javascript angular typescript rxjs

我正在尝试使用.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。

1 个答案:

答案 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);