2014-04-01 45 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