Выбор отфильтрованного массива необязательных объектов - PullRequest
1 голос
/ 30 апреля 2020

Я довольно новичок в Angular, и мне трудно понять это. У меня есть идентификатор детали, и я пытаюсь выбрать все (необязательные) объекты компании, которые имеют одинаковый идентификатор детали.

export class Part {
    id: number;
    name: string;
    company?: Company[];
}

...

public parts: Part[];
public filteredCompanies: Company[];

...

public filterCompanies(): void {
    this.filteredCompanies = this.parts.filter(part => part.id === retrievedID).map(part => part.company);
}

Следующая строка выдает ошибку с красной волнистой линией под this.filteredCompanies:

Type 'Company[][]' is not assignable to type 'Company[]'. Type 'Company[]' is missing the following properties from type 'Company': id, name, description, ...

Я думал, что синтаксис правильный, но я определенно что-то упускаю.

1 Ответ

3 голосов
/ 30 апреля 2020

Ваш код возвращает массив Company[], каждый из которых отфильтрован Part. Вы можете преобразовать Company[][] в Company[], вызвав метод flat :

this.filteredCompanies = this.parts.filter(...).map(part => part.company || []).flat();

Поскольку flat недоступен в Inte rnet Explorer, вы можете использовать одна из альтернатив, предложенных в документации MDN , если вам требуется поддержка этого браузера. Вот одна из возможных альтернатив:

this.filteredCompanies = this.parts.filter(...).map(part => part.company || [])
                                   .reduce((acc, val) => acc.concat(val), [])

См. этот стек-блиц для демонстрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...