angularjs - Angular - 在 ng-repeat 中对对象进行排序

标签 angularjs angularjs-ng-repeat ng-repeat

我有如下 Angular 对象:

var objs = {
    "1" : {name:'abc',createdAt:'2016-06-25'}
    "4" : {name:'abc',createdAt:'2015-07-06'}
    "7" : {name:'abc',createdAt:'2015-03-12'}
    "2" : {name:'abc',createdAt:'2016-01-04'}
    "6" : {name:'abc',createdAt:'2016-06-17'}
}

我想按属性“createdAt”DESC 顺序在 ng-repeat 中对这个 objs 进行排序 (orderBy)。

Please Note down that objs is of type Object not Array. I am iterating over objects.

如何实现?

<tr ng-repeat="obj in objs track by $index | orderBy : createdAt : true" >
    <td>{{obj.createdAt}}</td>
</tr>

我应该使用 $index 还是不使用?

这是 plnkr

最佳答案

内置的 orderBy 不适用于对象,但有人已经为您尝试做的事情创建了一个过滤器:

http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/

yourApp.filter('orderObjectBy', function() {
  return function(items, field, reverse) {
    var filtered = [];
    angular.forEach(items, function(item) {
      filtered.push(item);
    });
    filtered.sort(function (a, b) {
      return (a[field] > b[field] ? 1 : -1);
    });
    if(reverse) filtered.reverse();
    return filtered;
  };
});


<tr ng-repeat="item in items | orderObjectBy : 'createdAt' : true" >

https://plnkr.co/edit/3lbvJCegtHYIougIhK1R?p=preview

关于angularjs - Angular - 在 ng-repeat 中对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38389291/

相关文章:

AngularJS - angularAnimate 导致错误 : Cannot read property '' of undefined

javascript - angularjs ng-将嵌套数组重复到一个唯一列表中

arrays - Angularjs ng-repeat 数组 - 重复值

javascript - 如何从外部 Controller 的指令中调用函数?

javascript - 如何在核心javascript中实现angular $watch函数

javascript - AngularJS 在重复 block 之外和脚本标记中使用 ng-repeat 值

AngularJS 从服务器加载数据

angularjs - 使用 ng-repeat 重复具有不同 id 和 ng-init 的相同 div

angularjs - 不要在 ng-repeat 范围内重复元素

javascript - 在 AngularJS 中使用部分时设置主体类