Для автозаполнения ввода ищу в свойствах проекта во время набора. Теперь я хочу улучшить этот код
filterProjects(value: string) {
return this.projects.filter(
project =>
project.key.toLowerCase().indexOf(value.toLowerCase().trim()) >=
0 ||
project.name.toLowerCase().indexOf(value.toLowerCase().trim()) >=
0 ||
project.description?.toLowerCase().indexOf(value.toLowerCase().trim()) >=
0
);
}
следующим образом:
filterProjects(value: string) {
return this.projects.filter(project =>
[project.key, project.name, project.description].map(
str => str?.toLowerCase().indexOf(value.toLowerCase().trim()) >= 0
)
);
}
Я использую необязательную цепочку, потому что description
может быть нулевым или неопределенным.
Но это не работает, то есть функция всегда возвращает массив без изменений. Кроме того, когда значение находится в описании одного элемента, массив не фильтруется только до этого элемента.
Какое может быть решение, кроме использования «старых» проверок, таких как if (str !== undefined)
и т.п.?