2017-06-02 116 views
0
[{"creationDate":"2011-03-13T00:17:25.000Z","fileName":"IMG_0001.JPG"}, 
{"creationDate":"2009-10-09T21:09:20.000Z","fileName":"IMG_0002.JPG"}] 

[{"creationDate":"2012-10-08T21:29:49.800Z","fileName":"IMG_0004.JPG", 
{"creationDate":"2010-08-08T18:52:11.900Z","fileName":"IMG_0003.JPG"}] 

我使用HTTP get方法來接收數據。不幸的是,雖然我確實收到了這些數據塊,但它並沒有按照creationDate DESCENDING進行排序。 我需要通過creationDate對我的預期結果進行排序。Javascript Rsjx:按日期排序數據塊

[{"creationDate":"2012-10-08T21:29:49.800Z","fileName":"IMG_0004.JPG"}, 
{"creationDate":"2011-03-13T00:17:25.000Z","fileName":"IMG_0001.JPG"}] 

[{"creationDate":"2010-08-08T18:52:11.900Z","fileName":"IMG_0003.JPG"}, 
{"creationDate":"2009-10-09T21:09:20.000Z","fileName":"IMG_0002.JPG"}] 

這裏是我的嘗試:

dataInChunks.map(data => { 
    return data.sort((a,b)=> { 
     return new Date(b.creationDate).getTime() - new Date(a.creationDate).getTime(); 
    }); 
    }) 
    .subscribe(data => { 
    console.log(data); 
    }) 

這隻適用,但在導致給我最高層結果的時間只有1個對象。我需要一些方法將這些塊加入並分類,並以某種方式將整個對象再次分成兩塊。

有沒有我可以使用的RSJX操作符?

回答

0

如果您知道該通話確實完成(它應該),那麼您可以使用toArray,顧名思義它會返回一個數組,然後您可以對其進行排序。指定者的一點是,它不會產生數據流,但會等到觀察者完成並返回的所有值:

var allData = dataInChunks.toArray().sort(/*sorting logic*/); 

不過,如果你需要出示在瀏覽器中的數據,因爲它到達(如果指定者()方法使UI感覺反應遲鈍),那麼你將不得不重新排序的增加數據集,因爲它到達:

var allData =[]; 
dataInChunks 
    .bufferWithCount(4) 
    .subscribe(vals => { 
     allData = allData.concat(vals); 
     allData.sort(/* sort logic*/); 
    }) 

這是稍微哈克,因爲它是依靠可變流外,但沒有想到。它使用緩衝區​​,這將允許您限制重新排序的次數。

TBH,我只想用toArray方法,它首先提出了爲什麼它是可觀察的問題!祝你好運。