2016-11-22 43 views
1

我正在查询一个API并试图从它返回的数组中获取特定的元素。从Observable array Angular中选择元素

我查询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$; 
} 

我想打电话给过滤器找到了具有与num参数相匹配的值RN的一个元素的功能响应。我知道这是不对的,因为我得到两个错误回:

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

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

有没有一种方法可以让我达到到T []数组来检查每个元素的属性,然后返回匹配的元素给定的谓词?因为它代表我与T的可观察到的阵列工作,但我想回到一个可观察的只是一个 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; 
} 

回答

0

我看到一些错误这里。

  • 返回类型应该是:

Observable<Array<T>>

  • 增加 '任何' 到过滤功能:

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