2017-07-05 13 views
0

私は、レビューの数が最も多いものから順にソートし、その後アルファベット順に並べ替える以下の詳細のリストを持っています。角2パイプ:複数のフィールドでソートする方法は?

[ 
    { 
     "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']; 
    } 

ありがとうございます。

答えて

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 
      }); 
     } 
    } 
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']); 
     }); 
+0

を使用することができます。ただし、リストをアルファベット順にソートすることはできます。私は結果を得ることができるA B C D。 –

関連する問題