在AngularJS中使用数组过滤数组

rcp*_*p51 5 arrays filter angularjs 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,因为在这种情况下,用户试图邀请其他usergroup,为什么邀请某人谁的已经是会员?

我尝试创建自己的过滤器,但它只是一个烂摊子:

.filter('existingMembers', function() {
    return function(users, members) {
        return users.filter(function(user) {

            for (var i in user.id) {

                if (members.indexOf(user.id[i]) != -1) {
                    return;
                }
            }
            return user;

        });
    };
})
Run Code Online (Sandbox Code Playgroud)

Jus*_*ijn 2

经过一番折腾,这就是解决方案。请参阅 plunkr了解工作示例。我认为这应该可以解决问题:

模板:

<ion-checkbox ng-repeat="user in users | filter: excludeMembers:group.members" ng-model="user.checked">{{user.info.name}}</ion-checkbox>
Run Code Online (Sandbox Code Playgroud)

角度过滤器:

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

长解释

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