2016-04-25 18 views
5

ein Array mit einem Array Filtern habe ich versucht, mit einer Reihe wie so eine Gruppe von Kontrollkästchen Filtern:in AngularJS

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

wo group.members ein Array von user.id ist und es zeigt einfach nichts.

Benutzer Array:

[12345,123456]

group.members Array:

[12345]

Ich versuche nicht zu erreichen die group.members in der Liste der users zeigt, weil in In diesem Fall versucht ein Benutzer, eine weitere user an die group und warum einzuladen jemanden anrufen, der bereits Mitglied ist?

Ich habe versucht, meine eigenen Filter zu schaffen, aber es ist nur ein Durcheinander:

.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 alles zeigt richtig. – rcpilotp51

Antwort

2

Nach einigen Herumspielen, das ist die Lösung. See the plunkr für ein funktionierendes Beispiel. Ich denke, das den Trick tun sollten:

Vorlage:

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

Winkelfilter:

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

Lange Erklärung

Der Filter der Anordnung führt, wie sie Filterung gegen ein erster Parameter als Standard, dann mit der Doppelpunktnotation (:) können Sie optional argume liefern nts, ​​in Ihrem Fall: die Gruppe. Der Filter sollte eine Funktion zurückgeben, die ausgeführt wird. Der Rückgabewert sollte ein gefiltertes Array sein. Wir verwenden auch eine native JavaScript-Filterfunktion (verwirrend, whoa), um das Gruppenarray zu überprüfen.

+0

das funktioniert nicht. – rcpilotp51

+1

@ rcpilotp51 Aktualisiert. –

+0

@ rcpilot51 Aktualisiert (bis) – malix

0

Durch Verwendung eines Nachschlagetabellenobjekts (LUT) können Sie eine solche Filterung mit reinem JS durchführen.

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

danke, aber ich würde gerne einen Filter verwenden. Irgendwelche anderen Vorschläge? danke – rcpilotp51

+0

Meinst du eine Filterfunktion? Dann können Sie den obigen Code als 'function userFilter (u, g) benutzen {var lut = g.reduce ((p, c) => {p [c] = wahr; return p}, {}); gib u.filter zurück (e =>! lut [e])}; ' – Redu