Angular 2 Pipes:如何按多个字段排序?

时间:2017-07-05 10:52:09

标签: angular sorting pipes-filters

我有一个包含以下详细信息的列表,我希望按照评论数最多的那个排序,然后按字母顺序排序。

    [
     {
      "reviews": 9,
      "name": 'B'
     }, {
      "reviews": 9,
      "name": 'A'
     }, {
      "reviews": 15,
      "name": 'C'
     }, {
      "reviews": 9,
      "name": 'D'
     },..
    ]

我想要的排序顺序是:C A B D. 我有一个简单的排序管道,可以通过评论对其进行排序,但我希望它之后按名称排序。

    items.sort(function(a, b) {
      return a['reviews'] - b['reviews'];
    }

感谢。

2 个答案:

答案 0 :(得分:0)

 @Pipe({
        name: 'filter'
    })
    export class FilterPipe implements PipeTransform {
        transform(items: Array<any>, filter: {[key: string]: any }): Array<any> {
            return items.filter(item => {
                let notMatchingField = Object.keys(filter)
                                             .find(key => item[key] !== filter[key]);

                return !notMatchingField; // true if matches all fields
            });
        }
    }

答案 1 :(得分:0)

items
 .sort(function(a, b) {
      return a['reviews'] - b['reviews'];
    }
  .sort(function(a, b) {
    let a = a['name'].toUpperCase();
    let b = b['name'].toUpperCase();
    return (a < b) ? -1 : (a > b) ? 1 : 0;
   });

或者您可以使用toLocalCompare

items
     .sort(function(a, b) {
          return a['reviews'] - b['reviews'];
        }
      .sort(function(a, b) {
        return a['name'].localeCompare(b['name']);
       });