2017-03-09 123 views
0

我有一個oberservable,這是一個數組:RxJS - 翻譯可觀察到一個數組的一個新的可觀察的陣列

items$: Observable<CarClassification[]>;

,我試圖翻譯/轉換成一個新的可觀察的這下拉框中的SelectItems的數組。

get SelectItems(): Observable<SelectItem[]> { ...

,我可以再設置爲數據源的下拉框,並且如果項目$任何項目被修改,刪除或新加入的一個SelectItems變化數組逢。我遇到的問題是,我需要用這種方式定義數十個這樣的數組(大型對象的標準)。我所嘗試過的每一件事,如果它有效的話,實在太慢了(訂閱觀察者並推向新的陣列),我正在尋找更加無縫的方式。

我是RxJS的新手,我嘗試了幾個不同的東西,但都沒有效果。我已經搜索儘可能多的StackOverflow,就像我想的那樣。

CarClassification有兩個屬性,標識名稱我想讓的SelectItem標籤

我知道我可以觀察到的映射到一個數組:

items$.map((items) => { ...

但是,如何在正確遍歷每個項目項目,並返回一個新的SelectItem每個都有一直躲過我。

回答

2

如果您有可觀察到的發射陣列可以隨時與concatAll()再次解壓,然後包裝它像這個例子:

Observable.of([{...}, {...}, {...}]) 
    .concatAll() // unpack 
    // will emit each {...} as a single value 
    .toArray() // pack 

但你並不需要使用Rx的變換數組全部:

items$.map((items: CarClassification[]) => { 
    return items.map((item: CarClassification) => new SelectItem(...)); 
}); 

現在你有Observable<SelectItem[]>