2016-04-25 50 views
5

陣列我試圖過濾一組複選框與像這樣的數組:濾波的陣列,以在AngularJS

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

其中group.membersuser.id陣列,並且它只是不顯示任何東西。

用戶陣列:

[12345,123456]

group.members陣:

[12345]

我試圖完成不顯示在users列表group.members,因爲在這種情況下用戶試圖邀請另一個usergroup,爲什麼在vite已經是會員的人?

我試圖創建自己的過濾器,但它只是一個爛攤子:

.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; 

     }); 
    }; 
}) 
+0

@NikhileshKV一切正確顯示。 – rcpilotp51

回答

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; 
    }); 
    } 
}) 

龍解釋

過濾器需要你過濾對作爲數組作爲默認的第一個參數,然後用冒號標記(:)可以提供可選的參數nts,在你的情況下:團體。過濾器應該返回一個將被運行的函數。返回值應該是一個過濾數組。我們還使用本機JavaScript過濾器函數(混淆,哇)來檢查組數組。

+0

這不起作用。 – rcpilotp51

+1

@ rcpilotp51更新。 –

+0

@ rcpilot51更新(二) – malix

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>');

+0

謝謝,但我想使用一個過濾器。任何其他建議?謝謝 – rcpilotp51

+0

你的意思是過濾功能嗎?然後你可以利用上面的代碼作爲函數userFilter(u,g){var lut = g.reduce((p,c)=> {p [c] = true; return p},{});返回u.filter(e =>!lut [e])};' – Redu