Удалите элемент из списка интерфейса Typescript, когда запись присутствует, всегда отображается отрицательный индекс - PullRequest
0 голосов
/ 10 июня 2018

У меня есть интерфейс:

export interface ISchoolsPreview {
    // Shared
    AgeID: string;
    School_name?: string;
}

У меня есть функция, вызванная изменением флажка:

onChange(code: string, name: string, check: boolean): void {
    const tempPreview: ISchoolsPreview = {AgeID: code, School_name: name};

    if (check) {
      this.schoolsPreview.push(tempPreview);

    } else {
      //This is where the error lies
      const index = this.schoolsPreview.indexOf(tempPreview);
      if (index > -1) {
        this.schoolsPreview.splice(index, 1);
      }

    }
}

Проверка определяется тем, установлен ли флажок или нет.Если этот флажок установлен, он добавляет новый элемент ISchoolsPreview к schoolsPreview.Это работает, и когда я перехожу, он отображается и отображается правильно на моем интерфейсе.

Однако, когда я снимаю флажок, indexOf (tempPreview) всегда возвращает -1, даже если я передаю ту же запись.

Как правильно удалить элемент из моего списка интерфейсов

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Вы всегда должны находить индекс объекта на основе какого-либо свойства в объекте, а не использовать весь объект целиком, как показано ниже.

const index = this.schoolsPreview.findIndex((obj) => obj['Property'] === code);

Если у вас возникнут дублирующие коды в массиве,тогда вам может потребоваться сгенерировать уникальные идентификаторы для каждого объекта и выполнить поиск на основе этого идентификатора.

Примечание : я не уверен в этом, но передаю объект в индекс, возвращая true только в том случае, еслиссылки на объекты в той же памяти.Если вы пытаетесь найти новый объект, который находится в новой памяти, он может вернуть false.Кто-то может исправить меня в этом.

0 голосов
/ 10 июня 2018

Я исправил это, изменив:

  const index = this.schoolsPreview.indexOf(tempPreview);

на:

  const index = this.schoolsPreview.findIndex(s => s.AgeID === code);
...