2017-07-19 44 views
0

我有這個候選數組。其中一些被刪除,其中一些不是。他們是無序的,我想用姓氏來命令他們,以及他們是否被刪除。我使用的管道只接受數組,如果元素是對象,則通過給定的屬性對它們進行排序。分區,轉換,然後用rxjs壓縮到新數組

這並不難:

let added = this.candidates.filter(c => !c.removed); 
let removed = this.candidates.filter(c => c.removed); 

added = new OrderByPipe().transform(added, ['lastName']); 
removed = new OrderByPipe().transform(removed, ['lastName']); 

let orderedCandidates = added.concat(removed); 

對於我自身的興趣,我想通過.partition()

到我的候選人數組轉換爲可觀察到的和管它到目前爲止,我管理:

orderCandidates() { 
    let [added, removed] = Observable.from(this.candidates) 
     .partition(c => !c.removed); 
    added = added.toArray().map(a => new OrderByPipe().transfrom(a, ['-lastName'])); 
    removed = removed.toArray().map(r => new OrderByPipe().transfrom(r, ['-lastName'])); 
} 

然後我想壓縮或連接我的兩個排序數組到一個新的數組。我最近了解到,我對rxjs中的所有內容都有這樣的想法,流經一條非常精簡的流水線,而當我嘗試遵守這一形象時,我覺得我已經沒有想法。

+3

無覆蓋Downvotes ut解釋沒有用。 – wolfhoundjesse

回答

0

其實,如果你orderedCandidates已經是一個過濾排序的數組,爲什麼不從它創建一個可觀察到的,使用Observable.of()

let added = this.candidates.filter(c => !c.removed); 
let removed = this.candidates.filter(c => c.removed); 

added = new OrderByPipe().transform(added, ['lastName']); 
removed = new OrderByPipe().transform(removed, ['lastName']); 

let orderedCandidates = added.concat(removed); 

//create an Observable of list of ordered, sorted candidates 
let orderedCandidates$ = Observable.of(orderedCandidates); 

或者,如果你是真的愛上了觀測量和會想使用可觀察到的運營商,然後只需使用.map()改變你的數據:

orderCandidates() { 
    let orderedCandidate$ = Observable.from(this.candidates) 
     .partition(c => !c.removed) 
     .map(([added, removed])=>{ 
      added = added.toArray().map(a => new OrderByPipe().transfrom(a, ['-lastName'])); 
      removed = removed.toArray().map(r => new OrderByPipe().transfrom(r, ['-lastName'])); 
      return added.concat(removed); 
     }) 

    return orderedCandidate$; 
} 
+1

我覺得我倒過來看這些東西。我可以弄清楚自己在哪裏,以及我需要在哪裏,但不知道如何到達那裏。看看你的第二個例子,我可以告訴我通常會想到信息在底部流淌,所以我會糾結如何處理我在那裏的結果。我總是忘記事情回到頂端。我希望learnrx網站還有五十多個問題需要解決!大聲笑,謝謝你的優雅的解釋。 – wolfhoundjesse

+0

@wolfhoundjesse我知道對!一旦你品嚐了反應式編程的優點,你不能幫助,但總是以可觀察的方式做到這一點:) – CozyAzure

相關問題