2016-11-22 80 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)