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