Javascript | Соединение удаляет неправильный элемент из массива - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь использовать .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'
  }
]

В то время как все должно быть наоборот, Джон Доу должен быть удален, а Джейн Доу должна остаться.

1 Ответ

2 голосов
/ 19 мая 2019

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]

Просто вызовите splice самостоятельно и затем передайте users вашему установщику

users.splice(index,1);
setUsers(users);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...