1. ホーム
  2. javascript

[解決済み] angularJSでオブジェクトのプロパティでフィルタリングする方法

2022-05-16 22:35:57

質問

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." のオブジェクト プロパティにアクセスするための正しいパラメータを挿入していないように思われます。

何かアイデアはありますか?あなたの応答は非常に感謝しています。

どのように解決するのですか?

単純に 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>

フィドル