按属性对EmberJS对象的数组进行排序

时间:2012-01-27 23:36:28

标签: arrays sorting object properties ember.js

我在EmberJS网站的Filtering上注意到了这一点:

  

在Enumerable上执行的另一个常见任务是使用   可枚举为输入,并在 排序 之后返回一个数组或对其进行过滤   基于某些标准。

想象一下,我有一个Ember对象数组,如何按属性对它们进行排序?

App.DemoArray = Ember.ArrayController.create({
    content:[
        Ember.Object.create({name:'Joe', Age:29}),
        Ember.Object.create({name:'Jim', Age:53}),
        Ember.Object.create({name:'Jack', Age:12})
    ]
})

如果我想按年龄对上述内容进行排序怎么办?谢谢你的帮助!

编辑: 我在sproutcore文档中找到了这个,但它似乎不适用于Ember:

  

您可以根据某些属性或列表的值对Enumerable进行排序   使用sortProperty的属性。如果传入多个属性,   SproutCore将对第一个属性的值具有相同的值   通过第二个参数的值,依此类推。

本页第3.8节:http://guides.sproutcore20.com/enumerables.html

5 个答案:

答案 0 :(得分:16)

Ember MutableArray有一个sortBy方法:

https://emberjs.com/api/ember/release/classes/MutableArray

答案 1 :(得分:11)

编辑:以下解决方案似乎仅适用于数值。但是,此链接将提供有关如何处理字母数字,日期等的建议:http://www.javascriptkit.com/javatutors/arraysort2.shtml

没关系,我明白了。您可以使用以排序方法构建的Javascripts来完成它:

//To sort ASC
var sorted = content.sort(function(a,b) {
    return a.get('propertyYouWantToSortBy') - b.get('propertyYouWantToSortBy');
});

//To sort DESC
var sorted = content.sort(function(a,b) {
    return b.get('propertyYouWantToSortBy') - a.get('propertyYouWantToSortBy');
});

答案 2 :(得分:11)

As described here您现在可以对ArrayController进行排序。

你这样做的方法是在ArrayController上提供额外的属性(从上面的链接粘贴):

songs = [
  {trackNumber: 4, title: 'Ob-La-Di, Ob-La-Da'},
  {trackNumber: 2, title: 'Back in the U.S.S.R.'},
  {trackNumber: 3, title: 'Glass Onion'},
];

songsController = Ember.ArrayController.create({
  content: songs,
  sortProperties: ['trackNumber'],
  sortAscending: true
});

songsController.get('firstObject');  // {trackNumber: 2, title: 'Back in the U.S.S.R.'}
songsController.addObject({trackNumber: 1, title: 'Dear Prudence'});
songsController.get('firstObject');  // {trackNumber: 1, title: 'Dear Prudence'}

答案 3 :(得分:4)

如果遇到任何人,更新的ember排序方式是

 Ember.computed.sort('nameOfArrayToSort', sortDefinition)

sortDefinition可以是一个字符串数组

 ['mainSortProperty:asc', 'secondarySortProp:desc', ...]

或比较器功能

这里的文档:http://emberjs.com/api/classes/Ember.computed.html#method_sort

答案 4 :(得分:3)

正如https://github.com/emberjs/ember.js/issues/335中所述,核心ember.js包中不再实施排序。