AngularJSでオブジェクトプロパティでフィルタリングする方法 質問する

AngularJSでオブジェクトプロパティでフィルタリングする方法 質問する

AngularJS で、特定のプロパティの値によってオブジェクトのリストをフィルターするカスタム フィルターを作成しようとしています。この場合、「polarity」プロパティ (可能な値は「Positive」、「Neutral」、「Negative」) によってフィルターします。

フィルターなしの動作コードは次のとおりです。

HTML:

<div class="total">
    <h2 id="totalTitle"></h2>
    <div>{{tweets.length}}</div>
    <div id="totalPos">{{tweets.length|posFilter}}</div>
    <div id="totalNeut">{{tweets.length|neutFilter}}</div>
    <div id="totalNeg">{{tweets.length|negFilter}}</div>
</div>

以下は JSON 形式の "$scope.tweets" 配列です。

{{created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user       screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"}}

私が思いついた最良のフィルターは次のとおりです。

myAppModule.filter('posFilter', function(){
return function(tweets){
    var polarity;
    var posFilterArray = [];
    angular.forEach(tweets, function(tweet){
        polarity = tweet.polarity;
        console.log(polarity);
        if(polarity==='Positive'){
              posFilterArray.push(tweet);
        }
        //console.log(polarity);
    });
    return posFilterArray;
};
});

このメソッドは空の配列を返します。また、「console.log(polarity)」ステートメントからは何も出力されません。「polarity」のオブジェクト プロパティにアクセスするための正しいパラメータを挿入していないようです。

何かアイデアはありますか? ご返信いただければ幸いです。

ベストアンサー1

フィルターを使うだけですfilterドキュメンテーション) :

<div id="totalPos">{{(tweets | filter:{polarity:'Positive'}).length}}</div>
<div id="totalNeut">{{(tweets | filter:{polarity:'Neutral'}).length}}</div>
<div id="totalNeg">{{(tweets | filter:{polarity:'Negative'}).length}}</div>

Fiddle

おすすめ記事