Javascript Angularjs groupBy+;订货人

Javascript Angularjs groupBy+;订货人,javascript,angularjs,angularjs-filter,Javascript,Angularjs,Angularjs Filter,我正在使用groupBy from按对象的日期属性对对象数组进行分组 <div ng-repeat="(day, dayEvents) in events | groupBy: 'date' )"> <h3>{{ day | date: mediumDate }}</h3> </div> 我如何颠倒顺序,从最近的日期开始? 当我打印到控制台时,阵列按我想要的顺序打印: Object { 1423699200000: Array[1

我正在使用groupBy from按对象的日期属性对对象数组进行分组

<div ng-repeat="(day, dayEvents) in events | groupBy: 'date' )">
 <h3>{{ day | date: mediumDate }}</h3>
</div>
我如何颠倒顺序,从最近的日期开始? 当我打印到控制台时,阵列按我想要的顺序打印:

  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>

{{day}日期:mediumDate}

反转数组的更简单方法是使用

app.filter('reverseOrder',function(){
返回函数(项目){
返回items.slice().reverse();
};
});
{{day}日期:mediumDate}
尝试使用-

<div ng-repeat="(day, dayEvents) in events | groupBy: '-date' ">


顺便说一下,到现在为止,我还没有在任何地方使用过groupBy!但是这个负号与orderBy属性配合得很好

最近也有同样的问题
groupBy
创建了一个对象,但是
orderBy
需要一个数组,所以有点滑稽。我最终直接从他们的问题页面上得到了答案,其中一位作者做了很好的解释,并提供了基本上是复制/粘贴的代码示例


我们可以通过对控制器中的数据进行排序并将groupBy输出转换为数组来实现这一点

在控制器中,在将记录发送到视图之前对其进行排序:

$scope.events = $filter('orderBy')(events, '-date');
现在,模板按排序顺序接收数据。分组后,我们需要将其转换为数组:

<div ng-repeat="(day, dayEvents) in events | groupBy: 'date' | toArray:true )">
     <h3>{{ day | dayEvents[0].date: mediumDate }}</h3>
</div>

{{day | dayEvents[0]。日期:mediumDate}
似乎正确的方法是使用
|toArray:true | orderBy:customMappingFunction
,但是,我发现这方面的性能非常糟糕。我提出了一个解决方案,它可以保持性能并产生正确的结果——(尽管它看起来确实有点奇怪!)


{{key | ltrim:'-'}}
  • {{result}}

无论出于何种原因,添加
-
确实会强制
groupBy
正确排序,但它也会将其添加到
,因此我们可以将其删除

尽管如此,还原筛选器似乎对项目的显示方式没有任何影响。groupBy和负号不相关。他们没有任何关系
$scope.events = $filter('orderBy')(events, '-date');
<div ng-repeat="(day, dayEvents) in events | groupBy: 'date' | toArray:true )">
     <h3>{{ day | dayEvents[0].date: mediumDate }}</h3>
</div>
<div ng-repeat="(key, results) in allResults | groupBy: '-someKey' )">
    <h3>{{ key | ltrim: '-' }}</h3>
    <ul>
        <li ng-repeat="result in results">
            {{ result }}
        </li>
    </ul>
</div>