2016-04-25 5 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 नहीं दिखाया जा रहा कोशिश कर रहा हूँ क्योंकि इस मामले में कोई उपयोगकर्ता user को group पर आमंत्रित करने का प्रयास कर रहा है और क्यों किसी को पहले से ही सदस्य बनाओ?

मैं अपने खुद के फिल्टर बनाने की कोशिश की है, लेकिन इसकी सिर्फ एक गड़बड़:

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

लांग स्पष्टीकरण

फ़िल्टर सारणी आप के रूप में के खिलाफ फ़िल्टर कर रहे हैं लेता है डिफ़ॉल्ट के रूप में पहला पैरामीटर, फिर कोलन नोटेशन के साथ (:) आप वैकल्पिक तर्क की आपूर्ति कर सकते हैं एनटीएस, आपके मामले में: समूह। फ़िल्टर को एक फ़ंक्शन वापस करना चाहिए, जो चलाया जाएगा। वापसी मूल्य एक फ़िल्टर किए गए सरणी होना चाहिए। हम समूह सरणी के खिलाफ जांचने के लिए मूल जावास्क्रिप्ट फ़िल्टर फ़ंक्शन (भ्रमित, व्हाओ) का भी उपयोग करते हैं।

+0

यह काम नहीं करता है। – rcpilotp51

+1

@ rcpilotp51 अपडेट किया गया। –

+0

@ rcpilot51 अपडेट किया गया (बीआईएस) – malix

0

एक लुकअप टेबल (एलयूटी) ऑब्जेक्ट का उपयोग करके आप शुद्ध जेएस के साथ इस तरह कुछ फ़िल्टरिंग कर सकते हैं।

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

क्या आपका मतलब फ़िल्टरिंग फ़ंक्शन है? फिर आप उपर्युक्त कोड का उपयोग 'फंक्शन यूजरफिल्टर (यू, जी) {var lut = g.reduce ((पी, सी) => {पी [सी] = सच; वापसी पी}, {}) के रूप में कर सकते हैं; वापस लौटें। फिल्टर (ई =>! लूट [ई])}; ' – Redu