在AngularJS中使用数组过滤数组

时间:2016-04-25 12:35:24

标签: arrays angularjs filter ionic-framework

我尝试使用类似的数组过滤一组复选框:

<ion-checkbox ng-repeat="user in users | filter: {id: group.members}" ng-model="user.checked">{{user.info.name}}</ion-checkbox>

其中group.members是一个user.id的数组,它只是没有显示任何内容。

用户数组:

[12345,123456]

group.members数组:

[12345]

我试图在group.members列表中完成未显示 users,因为在这种情况下,用户正在尝试邀请另一个user {}} {}为什么邀请某位已经成为会员的人?

我尝试创建自己的过滤器,但它只是一团糟:

group

2 个答案:

答案 0 :(得分:2)

经过一番捣乱,这就是解决方案。 See the plunkr作为一个实例。 我认为这应该可以解决问题:

模板:

<ion-checkbox ng-repeat="user in users | filter: excludeMembers:group.members" ng-model="user.checked">{{user.info.name}}</ion-checkbox>

角度过滤器:

app.filter('excludeMembers', function(){
  return function(users, members){
    return users.filter(function(user){
      return members.indexOf(user.id) === -1;
    });
  }
})

长解释

过滤器将您要过滤的数组作为第一个参数作为默认值,然后使用冒号表示法(:),您可以提供可选参数,在您的情况下:组。过滤器应返回一个将运行的函数。返回值应为筛选数组。我们还使用本机javascript过滤器函数(令人困惑,哇)来检查组数组。

答案 1 :(得分:0)

通过使用查找表(LUT)对象,您可以使用纯JS进行一些这样的过滤。

var gmems = [12345, 567890],
    users = [12345,123456,432567,1234987,567890],
      lut = gmems.reduce((p,c) => {p[c]=true; return p},{}),
      res = users.filter(e => !lut[e]);

document.write('<pre>' + JSON.stringify(res, 0, 2) + '</pre>');