【问题标题】:Sort JSON Object by date value按日期值对 JSON 对象进行排序
【发布时间】:2014-05-12 00:05:03
【问题描述】:

我在 javascript 中有一个对象

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)

【问题讨论】:

标签: javascript json sorting date object


【解决方案1】:

您无法对对象进行排序,因为它包含键值对而不是序列化项目。

您必须先构造一个数组,然后对其进行排序。

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

【讨论】:

  • 感谢您的回答,我现在正在运行它,但是它没有对它们进行排序。我已经完成了 console.log(arr),它显示为一个包含许多对象的数组,每个对象都有一个 id 和一个日期。
  • 是的,arr应该是排序的。
  • 不,不是,我现在无法正常工作,哈哈,之前它在控制台中显示了数组,但现在没有。
  • 对象 1 日期:2013 年 11 月 18 日星期一 00:00:00 GMT+0000(GMT 标准时间) 对象 2 日期:2014 年 3 月 6 日星期四 00:00:00 GMT+0000(GMT 标准时间)对象 3 日期:Thu Sep 05 2013 00:00:00 GMT+0100(GMT 夏令时间)这未排序
  • 这行得通吗? arr.sort(function(a,b) { return a.date.valueOf() &gt; b.date.valueOf();});
【解决方案2】:

您不能“排序”JSON 对象;您唯一能做的就是将值放入数组中并对数组进行排序。我假设这两个“隐藏 ID”是两个不同的字段,因为您的示例不是有效的 JSON。

【讨论】:

  • 是的,如果我取出这些值,我如何将日期与正确的“隐藏 ID”匹配?
  • 我认为最好提供一个示例来说明您的预期结果。你不能对对象进行排序,所以 {"a": 1, "b": 2}{"b": 2, "a": 1} 是同一个东西,如果这是你想要的,你就不能拥有它。
  • 我的预期结果是有一个新对象,其 id 按日期排序。 {“id5”:“02/01/2014”,“id3”:“01/01/2014”,“id1”:“05/01/2013”​​}
  • @Joe — 正如这个答案所说,您无法对 JSON 对象进行排序。根据定义,它们是无序的。数组有顺序,对象没有。
  • 好吧,不可能将日期放入数组中然后排序,将日期与其相关的id匹配?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多