ng-repeat:仅输出唯一的首字母过滤器

时间:2014-03-11 21:07:10

标签: angularjs

我对使用ng-repeat循环的数据集进行了ng-repeat:

<div id="songlist">
<p ng-repeat="data in output">{{data.nm}}</p>
</div>

其中输出的内容如下:

<div id="songlist">
<p>Across The Universe</p>
<p>Blackbird</p>
<p>Baby In Black</p>
</div>

我想做的只是输出每个歌曲名称的唯一首字母,以便输出:

<div id="songlist">
<p>A</p>
<p>B</p>
</div>

关于如何实现这一目标的任何想法?谢谢!

3 个答案:

答案 0 :(得分:3)

如果你想要一个Angular过滤器解决方案,那么这可能会为你做到这一点:

app.filter('firstLetterFilter', [function () {
 return function (list) {
    var firstLetters = [];
    list.forEach(function (item) {
      var firstLetter = item.nm.charAt(0);
      if (firstLetters.indexOf(firstLetter) === -1) {
        firstLetters.push(firstLetter);
      }
    });
    return firstLetters;
  }
}]);

它在此Plunker工作:http://plnkr.co/edit/RS0kSNj3sERayJBjDqF4

答案 1 :(得分:1)

从包含所需功能的方法创建新模型,然后使用ng-repeat迭代该对象

答案 2 :(得分:1)

http://plnkr.co/edit/aj2mass5mZTM3VmGjSIk?p=preview

请参阅上面的过滤器

 <div class="item" ng-repeat="person in people | firstUnique">

    app.filter('firstUnique',function() {
      return function( persons) {
        var filtered = [];
    var p = {};
        angular.forEach(persons, function(item) {
          var first = item.name.substring(0,1);
          if(p[first]){

          }else{
            p[first] = first;
            filtered.push({name :first});
          }
        });

        return filtered;
      };

    });