Выберите элемент из массива Observable Angular

Я запрашиваю API и пытаюсь получить определенный элемент из массива, который он возвращает.

Я запрашиваю API и получаю ответ JSON. Я отправляю ответ через вызов .map функции, которая сопоставляет каждый объект в ответе с T.

getOne(num: number): Observable<T> {
      let t$ = this.http
      .get(`${this.API_URL}?${this.getParams()}`)
        .map(mapToTypeT)
        .filter(x => Number.parseInt(x.rn) === num)

      return t$;
}

Я хочу вызвать фильтр, чтобы найти один элемент со значением rn, соответствующим параметру num. Я знаю, что это неправильно, так как я получаю две ошибки:

Property 'rn' does not exist on type 'T[]'

Type 'T[]' is not assignable to type 'T'

Есть ли способ получить доступ к массиву T[ ], чтобы проверить свойства каждого элемента, а затем вернуть элемент, соответствующий заданному предикату? В настоящее время я работаю с массивом Observable из T, но я хочу вернуть Observable только из одного T.

Для справки, две другие функции:

function mapToTypeT(response:Response): T[]{
  return response.json().map(t => toT(t))
  }


  function toT(r:any): T{
  let t = <T>({
    staId:    r.staId,
    stpId:    r.stpId,
    staNm:    r.staNm,
    stpDe:    r.stpDe,
    rn:       r.rn,
  });
  return t;
}

person todon2    schedule 22.11.2016    source источник


Ответы (1)


Я вижу здесь что-то не так.

  • Тип возврата должен быть:

Observable<Array<T>>

  • Добавьте «любой» в функцию фильтра:

.filter(x => Number.parseInt((<any>x).rn) === num)

person Vu Quyet    schedule 22.11.2016