角度模板:循环对象,按值排序

时间:2014-05-05 14:12:24

标签: angularjs

我有一个javascript对象,我想以角度循环。对象中的键是名称,值是等级。我想按排名对元素进行排序。我试过这个没有用的东西:

ng-repeat="(name, rank) in topCategories | orderBy: '-rank'"

我也试过没有单词引号围绕" rank"。 结果是元素循环但没有排序。没有记录错误。是否可以在迭代对象时进行排序?

示例数据来源:

{
    foo: 5,
    bar: 7,
    baz: 42
}

编辑检查源代码后,如果提供的参数是对象而不是数组,则很容易看到orderBy过滤器只是立即返回。 https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js#L68

1 个答案:

答案 0 :(得分:2)

将数据结构化为对象总是让我难以重复。我总是需要先将它转换为一个对象数组。而不是将您的数据作为:

{
    foo: 5,
    bar: 7,
    baz: 42
}

尝试将其作为对象数组:

[
  {name: 'foo', rank: 5}
  {name: 'bar', rank: 7}
  {name: 'baz', rank: 42}
]

然后你的HTML很简单:

ng-repeat="result in topCategories | orderBy: '-rank'"

<强> Plunker Example

来源:

Google Groups: Order by object?

Orderby not working with dict syntax on ng-repeat

Has been previously addressed as an issue

消息人士称,orderBy需要一组对象