Angular RX JS 6: фильтровать наблюдаемый массив для элементов, соответствующих ключу объекта - PullRequest
0 голосов
/ 04 августа 2020

У меня есть служба, которая возвращает массив объектов как наблюдаемое, список стран с объектами с названием страны и трехбуквенным кодом, countries$ = this.mockData.get('countries.json');

Если у меня трехбуквенный код для страны я хочу иметь возможность фильтровать наблюдаемое и возвращать совпадающее имя. Например, если у меня есть «GBR», я хочу вернуть «Соединенное Королевство Великобритании и Северной Ирландии»

Я пробовал это,

  getfullCountryName() {
    const name = this.countries$.pipe(filter((c) => c.alpha3 === 'GBR'));
    console.log('name =', name);
    
    return name;
  }

, но я, должно быть, что-то забыл, так как все, что я получаю в консоли, это name = Observable {_isScalar: false, source: Observable, operator: FilterOperator}

Что я оставляю?

countries$ - это тип Country

export interface Country {
  numeric: string;
  alpha2: string;
  alpha3: string;
  name: string;
}

где я должен поместить тип < > в этом выражении, чтобы получить набор текста. например, что c имеет атрибут alpha3

1 Ответ

0 голосов
/ 04 августа 2020

Фильтр возвращает наблюдаемый в вашем случае, который присваивается name ;

getfullCountryName() {
    const name = this.countries$.pipe(filter((c) => c.alpha3 === 'GBR'));
      
    return name;  // returns observable
}

где-то

this.getfullCountryName().subscribe(result=>console.log(result));  // will print the right result.

лучшая версия,
 getfullCountryName() {
    return this.countries$.pipe(filter((c) => c.alpha3 === 'GBR'));
}
...