2016-05-21 6 views
3

私はフロントエンドでAngularで作業していますが、最後にnullに2つのプロパティを含む結果を入れるためにフィルタを実行する方法を理解しようとしています。どちらか一方のプロパティである可能性があります。例えばnullプロパティを含む結果を最後に入れるためにフィルタを実行するにはどうすればよいですか?

:あなたが見ることができるように、私はHTMLでやっている何を

<div ng-repeat="show in shows | filter:query | orderBy:'rating':true"> 
     <a href="/shows/{{show._id}}"> 
     <img ng-src="{{show.poster}}" width="100%"/> 
     </a> 
     <div> 
     <a href="/shows/{{show._id}}">{{show.name}}</a> 
     <p> 
      Episodes: {{show.episodes.length}} <br> 
      <span>Rating: {{show.rating}}</span> 
     </p> 
     </div> 
    </div> 

、評価によって発注されます。問題は、プロパティratingnullになると、その要素が結果の先頭に表示され、評価の高い要素がリストに表示されます。

これは私が受けていたオブジェクトです:

{ 
    "_id": 310243, 
    "name": "Five Star Babies: Inside the Portland Hospital", 
    "airsDayOfWeek": "Wednesday", 
    "airsTime": "21:00", 
    "firstAired": "2016-04-13T00:00:00.000Z", 
    "network": "BBC Two", 
    "overview": "An exclusive glimpse inside the UK's only private maternity hospital.\r\n", 
    "rating": null, // THIS PROPERTY COMES NULL 
    "ratingCount": 0, 
    "status": "Continuing", 
    "poster": "/someImage/path", 
    "subscribers": [] 
} 

オブジェクトはここから来ている:

$scope.shows = Show.query(); 

$scope.shows戻ります。このこと:ところで、オブジェクトの

[ 
    { 
    "_id": 73787, 
    "name": "That '70s Show", 
    "airsDayOfWeek": "Thursday", 
    "airsTime": "8:00 PM", 
    "firstAired": "1998-08-23T00:00:00.000Z", 
    "network": "FOX (US)", 
    "overview": "Set in the Wisconsin suburbs...", 
    "rating": null, // PROPERTY NULL 
    "ratingCount": 87, 
    "status": "Ended" 
    "poster": "/some/Img/Path" 
    }, 
    { 
    "_id": 35345, 
    "name": "Friends", 
    "airsDayOfWeek": "Thursday", 
    "airsTime": "8:00 PM", 
    "firstAired": "1998-08-23T00:00:00.000Z", 
    "network": "FOX (US)", 
    "overview": "New York TV Show...", 
    "rating": 9.1, 
    "ratingCount": 87, 
    "status": "Ended" 
    "poster": null // PROPERTY NULL 
    } 
] 

が来て、私が結果の最後に置く必要がある2つのプロパティあなたはnull,ratingまたはposterです。

TL; DR:

rating又は poster === null

任意の提案を持つ要素を結果、最も高い評価を有する要素の上部に置き、最後に

[並べ替え機能?

+1

データを調整するか、カスタムフィルタを使用する – charlietfl

+0

@charlietfl APIからデータを調整する方法は? – TheUnnamed

+0

データを受け取ったときにループすることができ、 'null'を' 0'に変更して適切にソートすることができます。あなたのアプリケーションに合わせてデータを操作する必要があることは珍しくありません – charlietfl

答えて

1

値を返す独自のカスタムorderBy関数を記述することができます。たとえば、次のように

$scope.order = function(show) { 
    if (show.rating == null || show.poster == null) return 0; 
    return show.rating; 
} 

HTML

<div ng-repeat="show in shows | filter:query | orderBy:order:true"> 

Sample pen

+0

mmmこれは何もしていません – TheUnnamed

+0

興味深い、私を見てみましょう。 –

+0

それは間違いなく動作していますが、私は逆のオプションを省略しました。それは 'orderBy:order:true'でなければなりません、私は答えを編集します。編集:サンプルペンも追加しました。 –

関連する問題