我尝试使用类似的数组过滤一组复选框:
<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
答案 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>');