在ng-repeater中过滤掉重复项,但在项目旁边增加值

时间:2016-11-14 02:59:51

标签: javascript angularjs

我有一个过滤器,它正在删除我所拥有的ng-repeater中的重复项。我需要能够显示值旁边的数组中的值。

E.g。如果我有一个阵列['休斯顿','休斯顿','达拉斯' ]

页面上的值如下:houston(2),dallas(1)

我以为我有一个解决方案,但我得到了角度错误,因为我正在返回一个数组,而不是我原来的项目。我基本上将项目推送到数组中作为[item,1],其中一个是它被看到的次数。我会创建if语句的else部分,我将增加该数量,但不会去。

需要一些如何使其发挥作用的想法。

这是我创建的过滤器

.filter('unique', function() {
  return function(collection, keyname) {
    var output = [], 
        keys = [];

    angular.forEach(collection, function(item) {
      var key = item[keyname];

      if(keys.indexOf(key) === -1) {
        keys.push(key);
        output.push(item);
      }
    });
    return output;
  };
});

这是带有我的过滤器的ng-repeater。 (注意我添加了{{value}}我需要的项目数量)

<li ng-repeat="info in search.hits | unique: 'type'">
  <a>{{ info.type }} {{ value }}</a>
</li>

谢谢!

1 个答案:

答案 0 :(得分:1)

这很简单。

添加一个这样的计数器

.filter('unique', function() {
  return function(collection, keyname) {
    var output = [];
    angular.forEach(collection, function(item) {
      var obj = output.filter(function(x) {
        return x[keyname] == item[keyname];
      });
      if (obj.length > 0)
        obj.count += 1;
      else {
        item.count = 1;
        output.push(item);
      }
    });
    return output;
  };
});

查看:

<li ng-repeat="info in search.hits | unique: 'type'">
  <a>{{ info.type }} {{ info.count || 0 }}</a>
</li>
相关问题