Javascript 如何迭代无序的JSON数据并将其排序到数组中

Javascript 如何迭代无序的JSON数据并将其排序到数组中,javascript,angularjs,json,Javascript,Angularjs,Json,我从json对象结构中的API获取数据。问题是这个json不符合顺序,我理解它本质上是无序的。我想知道如何迭代这些键,并通过将它们放入数组对这些数据进行排序(我已经使用ng repeat将它们打印在表中,但它们是随机顺序的,所以我的最终目标是按日期顺序显示它们)。以下是该结构的一个示例: { "01/05/2016": { "Something1": {}, "Something2": {} }, "01/01/2016"

我从json对象结构中的API获取数据。问题是这个json不符合顺序,我理解它本质上是无序的。我想知道如何迭代这些键,并通过将它们放入数组对这些数据进行排序(我已经使用ng repeat将它们打印在表中,但它们是随机顺序的,所以我的最终目标是按日期顺序显示它们)。以下是该结构的一个示例:

{
    "01/05/2016": {
         "Something1": {},
         "Something2": {}      
     },
    "01/01/2016": {
         "Something1": {},
         "Something2": {}      
     },
    "01/03/2016": {
         "Something1": {},
         "Something2": {}      
     }
}

 <tr ng-repeat="(key,value) in metrics_data">
          <td align="center">{{key}}</td>
          //and then I do another ng-repeat right here for values
{
"01/05/2016": {
“某物1”:{},
“某物2”:{}
},
"01/01/2016": {
“某物1”:{},
“某物2”:{}
},
"01/03/2016": {
“某物1”:{},
“某物2”:{}
}
}
{{key}}
//然后我在这里做另一个ng重复,求数值

orderBy不支持对象这一事实是正确的。因此,只需先将对象转换为数组

$scope.testObj = {
"01/05/2016": {
     "Something1": {},
     "Something2": {}      
 },
"01/01/2016": {
     "Something1": {},
     "Something2": {}      
 },
"01/03/2016": {
     "Something1": {},
     "Something2": {}      
 }
};

$scope.testObjArray = Object.keys($scope.testObj).map(
                     function(k) { 
                         return {key: k, value: $scope.testObj[k]} 
                     });
然后使用orderBy

ng-repeat="obj in testObjArray | orderBy : 'key'"

请参见

是否保证您的所有日期都在同一年?如果是这样,您可以利用
Array.prototype.sort
。为什么不使用orderBy过滤器呢?我试过了,但这只适用于数组。我的结构是json。日期不保证来自同一年如果您的日期为2016年5月1日、2015年1月1日、2016年3月1日,订单将不起作用如果其中一个值为2015年3月1日,会发生什么情况?将被排序为2016年1月1日2015年3月1日2016年5月1日谢谢,刚刚完成,看起来它正在起作用。我没有在不同的年份测试过它,所以我必须研究一下。处理这种情况有什么可能的解决方案吗?因为日期只是一个字符串,所以需要将其转换为适当的日期对象,以便对其进行适当排序。只需在映射器内部执行即可。i、 返回{key:newdate(k),值:$scope.testObj[k]};。无论如何,您可以将密钥转换为您喜欢的任何类型并对其进行排序。