Splice не удаляет правильный объект в моем массиве - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь удалить объект из массива, используя индекс, а затем обновляю список. Однако сплайс не удаляет ожидаемый объект.

В моем компоненте редактирования:

onDelete() {
    const index = this.actRoute.snapshot.params.id;
    this.riverSvc.removeRiver(index);
  }

В моем сервисе:

private storedRivers: RiverInfo[] = [
    {
      name: 'Cartecay',
      address: 'Lower Cartecay Road',
      currentFlow: 2.78,
      desiredMin: 1.5,
      desiredMax: 6
    },
    {
      name: 'Etowah',
      currentFlow: 857,
      desiredMin: 100,
      desiredMax: 500
    },
    {
      name: 'Yellow',
      address: 'Brown Bridge Road',
      currentFlow: 2800,
      desiredMin: 400,
      desiredMax: 3000
    }
  ];

removeRiver(index: number) {
    console.log(index); // index is correct in the console.
    this.storedRivers.splice(index, 1);
    console.log(this.storedRivers);
    this.watchedRiversChanged.next(this.storedRivers);
  }

В моем компоненте списка:

ngOnInit() {
    this.subscription = this.riverSvc.watchedRiversChanged
      .subscribe((myRivers: RiverInfo[]) => {
        this.riverWatchList = myRivers;
      });
    this.riverWatchList = this.riverSvc.watchedRivers();
  }

1 Ответ

0 голосов
/ 27 февраля 2020

Я полагаю, вы пытаетесь удалить только элемент по указанному индексу в вашем массиве. Если это так, вы должны указать deleteCount справа от startIndex для метода splice().

В соответствии с Javascript веб-документами MDN для Array.prototype.splice () method

Если deleteCount опущен или если его значение равно или больше, чем array.length - start (то есть, если оно равно или превышает количество элементов, оставшихся в массив, начиная с начала), затем все элементы от начала до конца массива будут удалены.

Так что обновите removerRiver(), как показано ниже:

removeRiver(index: number) {
  /**
  * deleteCount is now set to value 1
  * This should only remove the element at the specified index
  */
  this.storedRivers.splice(number, 1);
  // perform your logic
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...