我正在使用 angular-filter 中的 groupBy 按对象的日期属性对对象数组进行分组。
<div ng-repeat="(day, dayEvents) in events | groupBy: 'date' )">
<h3>{{ day | date: mediumDate }}</h3>
</div>
产生以下内容:
Feb 9, 2015
Feb 10, 2015
Feb 11, 2015
Feb 12, 2015
我怎样才能将订单从最近的日期开始?当我打印到控制台时,数组以我想要的顺序打印:
Object {
1423699200000: Array[1],
1423612800000: Array[7],
1423526400000: Array[11],
1423440000000: Array[1]
}
我还写了一个自定义过滤器来反转 groupBy 之后的顺序:
.filter("reverseOrder", function() {
function sortNumber(a,b) {
return parseInt(b) - parseInt(a);
}
return function(collection) {
var keys = Object.keys(collection).sort(sortNumber);
var reveredCollection= {};
var length=collection.length;
angular.forEach(keys, function(key) {
reveredCollection[key] = collection[key];
});
return reveredCollection;
}
})
我这样申请的:
<div ng-repeat="(day, dayEvents) in events | groupBy: 'date' | reverseOrder )">
<h3>{{ day | date: mediumDate }}</h3>
</div>
原文由 cksrc 发布,翻译遵循 CC BY-SA 4.0 许可协议
最近有同样的问题。
groupBy
创建一个对象,但是orderBy
需要一个数组,所以有一点时髦。我最终直接从他们的问题页面得到了答案,其中一位作者用基本上是复制/粘贴的代码示例很好地解释了它。https://github.com/a8m/angular-filter/issues/57#issuecomment-65041792