2014-04-01 278 views
0

我在JavaScript中排序JSON對象按日期值

Object {HIDDEN ID: "06/03/2014", HIDDEN ID: "21/01/2014"} 

我希望能夠創建將有它最近日期排序的一個新對象的對象。

像這樣:

SortedObject {"HIDDEN ID" : "21/01/2014", "HIDDEN ID" : "06/03/2014"} 

我知道我可以如何與一個數組實現這一點,但我不知道如何通過迭代對象按日期排序。

任何幫助深表感謝

編輯:

現在我有這樣的代碼。

for(var x=0; x<folderList.length; x++){ 
        retrieveAllFilesInFolder(folderList[x], function(){ 
         var arr = []; 
         for(var i in fileListObj) { 
          var d = fileListObj[i].split("/"); 
          arr.push({"id": i, "date":(new Date(d[2],d[1]-1,d[0]))}); 
         } 
         arr.sort(function(a,b) { return a.date < b.date;}); 
         console.log(arr); 
        }); 
       } 

但是我的輸出沒有按日期排序。

Object 1 id: "hiddenID1", date: Mon Nov 18 2013 00:00:00 GMT+0000 (GMT Standard Time) 
Object 2 id: "hiddenId2", date: Thu Mar 06 2014 00:00:00 GMT+0000 (GMT Standard Time) 
Object 3 id: "hiddenId3", date: Thu Sep 05 2013 00:00:00 GMT+0100 (GMT Daylight Time) 
+0

看看http://stackoverflow.com/questions/3859239/sort-json-by-date – Tuhin

+0

JSON是一種序列化格式; 「JSON對象」是字符串。你有什麼是普通的物體。 – RemcoGerlich

+0

你可以在這裏找到這個主題的一些有用的答案:** [按日期排序Javascript對象數組] **(http://stackoverflow.com/a/26759127/2247494)** – jherax

回答

4

您不能排序對象,因爲它包含鍵值對&未序列化的項目。

您必須先構造一個數組&然後對其進行排序。

var obj = {"a" : "21/01/2014", "b" : "06/03/2014"}; 

var arr = []; 

for(var i in obj) { 

    var d = obj[i].split("/"); 

    arr.push({"id": i, "date":(new Date(d[2],d[1]-1,d[0]))}); 
} 

arr.sort(function(a,b) { return a.date.valueOf() > b.date.valueOf();}); 

結果將是一個按日期排序的陣列arr

+0

感謝您的回答,我現在有這個運行,但它沒有排序它們。我已經完成了console.log(arr),它顯示爲一個擁有許多對象的數組,每個對象都有一個id和一個日期。 – Joe

+0

是的,應對arr進行排序。 – loxxy

+0

不,它不是,我現在無法得到它的工作哈哈它顯示在控制檯之前,現在它沒有數組。 – Joe

1

你不能「排序」JSON對象;你可以做的唯一的事情就是將值存入數組並對數組進行排序。我假設兩個「隱藏的ID」是兩個不同的字段,因爲你的例子不是有效的JSON。

+0

是的,如果我將這些值,那麼我該如何將日期與正確的「隱藏身份證」進行匹配? – Joe

+0

我認爲最好的方法是提供預期結果的例子。你不能對對象進行排序,所以'{「a」:1,「b」:2}'和'{「b」:2,「a」:1}'是同樣的東西,如果這就是你想要的東西沒有。 – marco

+0

我的預期結果是有一個新的對象與按日期排序的ID。 {「id5」:「02/01/2014」,「id3」:「01/01/2014」,「id1」:「05/01/2013」​​} – Joe