2013-06-27 56 views
0

對不起,如果這是一個真正的問題,但我剛剛進入rails並且無法弄清楚這個問題。按日期對返回的JSON數組排序

我目前正在從一個網站與分析工作。並希望將數據放入圖表中。但是,當我獲得數據時,我想要的東西不是爲了順序。目前,返回的數據是:

{"legend_size":1,"data":{"series":["2013-06-20","2013-06-21","2013-06-22","2013-06-23","2013-06-24","2013-06-25","2013-06-26"],"values":{"undefined":{"2013-06-26":41,"2013-06-24":2,"2013-06-25":55,"2013-06-22":0,"2013-06-23":1,"2013-06-20":0,"2013-06-21":0}}}} 

而我需要的是[「數據」] [「值」] [「未定義」]位被按照時間先後。

我知道這是一個簡單的問題。但是我到處都找,無法弄清楚。

+0

你真的不能排序的對象,你是否只想對鍵進行排序? – NicoSantangelo

+0

我需要將它排序在一起真的,所以我可以將它繪製成圖形,日期(鍵)是標籤,值是圖上的點 – RustComet

+0

JavaScript對象(哈希)不保證順序,所以我懷疑圖書館關心值是否被排序。你有沒有嘗試過只對數組進行排序?我有一個預感,數組用於排序值。 – Amadan

回答

0

好吧,正如我在評論中所說,你不能真正排序和反對,因爲它有一個任意的順序,所以你必須使用一個數組。

我的解決辦法是:

var objectFromAnalytics = {"2013-06-26":41,"2013-06-24":2,"2013-06-25":55,"2013-06-22":0,"2013-06-23":1,"2013-06-20":0,"2013-06-21":0}, 
     toSort = [], 
     dateParts; 
    for (var date in objectFromAnalytics) { 
     dateParts = date.split("-"); 

     toSort.push({ date: new Date(dateParts[0], (dateParts[1] - 1), dateParts[2]), value: objectFromAnalytics[date] }); 
    } 


    var sorted = toSort.sort(function(a,b){ 
     return a.date < b.date ? -1 : a.date > b.date ? 1 : 0; //you can change this to sort by value if you want 
    }); 

//sorted == [{ date: dateObject, value: value from analytics} , { ... }] 

你或許可以矇混過關數較少行這樣做,但我覺得是可以理解的這樣:)

+0

創建一堆Date對象有點重量級。你可以按字典順序排序字符串。 < and >運算符在字符串上工作良好。 –

+0

是的,好點,所以你不必做'新日期'和'分裂' – NicoSantangelo