Como filtrar por propriedade de object em angularJS

Eu estou tentando criar um filtro personalizado no AngularJS que irá filtrar uma lista de objects pelos valores de uma propriedade específica. Nesse caso, quero filtrar pela propriedade “polarity” (valores possíveis de “Positive”, “Neutral”, “Negative”).

Aqui está o meu código de trabalho sem o filtro:

HTML:

{{tweets.length}}
{{tweets.length|posFilter}}
{{tweets.length|neutFilter}}
{{tweets.length|negFilter}}

Aqui está a matriz “$ scope.tweets” no formato JSON:

 {{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"}} 

O melhor filtro que eu poderia criar da seguinte forma:

 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; }; }); 

Este método retorna um array vazio. E nada é impresso a partir da instrução “console.log (polaridade)”. Parece que não estou inserindo os parâmetros corretos para acessar a propriedade de object de “polaridade”.

Alguma ideia? Sua resposta é muito apreciada.

Você simplesmente tem que usar o filter filter (veja a documentação ):

 
{{(tweets | filter:{polarity:'Positive'}).length}}
{{(tweets | filter:{polarity:'Neutral'}).length}}
{{(tweets | filter:{polarity:'Negative'}).length}}

Violino

A documentação tem a resposta completa. De qualquer forma é assim que se faz:

  
  • {{i | json }}
  • filtrará apenas a age na matriz de data e a true será para a correspondência exata.

    Para filtragem profunda,

     
  • {{i}}
  • O $ é uma propriedade especial para o filtro profundo e o true é para a correspondência exata, como acima.

    Você também pode fazer isso para torná-lo mais dynamic.

      

    Então você ng-repeat ficará assim

     

    Este filtro será apenas usado para filtrar por polaridade

    Nós temos a coleção como abaixo:

    insira a descrição da imagem aqui

    Sintaxe:

     {{(Collection/array/list | filter:{Value : (object value)})[0].KeyName}} 

    Exemplo:

     {{(Collectionstatus | filter:{Value:dt.Status})[0].KeyName}} 

    -OU-

    Sintaxe:

     ng-bind="(input | filter)" 

    Exemplo:

     ng-bind="(Collectionstatus | filter:{Value:dt.Status})[0].KeyName" 

    Você pode tentar isso. seu trabalho para mim ‘nome’ é uma propriedade em arr.

     repeat="item in (tagWordOptions | filter:{ name: $select.search } ) track by $index