У меня есть интерфейс:
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, даже если я передаю ту же запись.
Как правильно удалить элемент из моего списка интерфейсов
Возможный дубликат Почему Array.indexOf не находит идентично выглядящие объекты



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я исправил это, изменив:
const index = this.schoolsPreview.indexOf(tempPreview);
к:
const index = this.schoolsPreview.findIndex(s => s.AgeID === code);
Вы всегда должны находить индекс объекта на основе некоторого свойства в объекте, а не использовать сам объект целиком, как показано ниже.
const index = this.schoolsPreview.findIndex((obj) => obj['Property'] === code);
Если вы думаете, что у вас будут повторяющиеся коды в массиве, вам, возможно, придется сгенерировать уникальные идентификаторы для каждого объекта и выполнить поиск на основе этого идентификатора.
Примечание: Я не уверен в этом, но передаю объект в индекс, а возвращает true, только если объект ссылается на ту же самую память. Если вы пытаетесь найти новый объект, находящийся в новой памяти, он может вернуть false. Кто-нибудь может поправить меня в этом.
Думаю, ваш вопрос касается indexOf. Поскольку вы пытаетесь сравнивать объекты, важно понимать, что indexOf fn в javascript не использует глубокое сравнение. Кто-то еще предлагал решение по другому вопросу: stackoverflow.com/questions/12604062/…. Надеюсь, это поможет!