मेरी समस्या यह है कि मेरे पास यह कार्य है:

function filterByCheckBox(e) {
   if (e.target.checked == true) {
       const checkOption = e.target.value;
       const div = document.getElementById('peoples');
       if (devsFiltered != "") {
           const filtered = devsFiltered.filter(item => {
               for (let x = 0; x < item.programmingLanguages.length; x++) {
                   return item.programmingLanguages[x].language == checkOption;
               }
           });
           div.innerHTML = ""
           devsFiltered = filtered;
           mapUsers(filtered);
       }
   }
}
const checkBoxes = document.querySelectorAll('input[type=checkbox]');
checkBoxes.forEach(box => {
   return box.addEventListener('change', filterByCheckBox)
})

मूल रूप से मैं चेकबॉक्स द्वारा आने वाले मूल्य के अनुसार "devsFiltered" सरणी को फ़िल्टर कर रहा हूं, जहां 3 संभावित चयन हैं: जावा, जावास्क्रिप्ट या पायथन और devsFiltered में मेरे पास सूचनाओं की एक सरणी और "प्रोग्रामिंग भाषा" नामक एक उप-सरणी है। जहां फ़िल्टर करने के लिए भाषाएं हैं, इसलिए समस्या यह है कि जब मैं पहली बार चेकबॉक्स का चयन करता हूं, ठीक काम करता है और फ़िल्टर किए गए सरणी को लौटाता है, लेकिन अगर मैं एक बार फिर कोशिश करता हूं जब फ़ंक्शन devsFiltered.filter() बनाता है तो वह एक खाली लौटाता है सरणी। कोई विचार?

जिन चीज़ों की मैंने पुष्टि की है: पहले फ़िल्टर के बाद फ़िल्टर किया गया देव खाली नहीं है।

0
Nicholas_nops 28 सितंबर 2020, 22:49

1 उत्तर

सबसे बढ़िया उत्तर
       const filtered = devsFiltered.filter(item => {
           for (let x = 0; x < item.programmingLanguages.length; x++) {
               return item.programmingLanguages[x].language == checkOption;
           }
       });

आपका for लूप हमेशा तब लौटता है जब वह पहली प्रोग्रामिंग भाषा से टकराता है, जिसका अर्थ है कि आप उन प्रोग्रामर के लिए फ़िल्टर कर रहे हैं जिनकी पहली प्रोग्रामिंग भाषा आपके द्वारा चेक की गई प्रोग्रामिंग भाषा से मेल खाती है, न कि उन लोगों के लिए जिनके पास है कोई भी मेल खाने वाली प्रोग्रामिंग भाषा। यदि आप किसी अन्य प्रोग्रामिंग भाषा की जांच करते हैं, तो आप उन प्रोग्रामर को फ़िल्टर कर रहे हैं जिनकी पहली प्रोग्रामिंग भाषा दोनों चेकबॉक्स मानों से मेल खाती है।

लूप के बजाय .some() का उपयोग करने पर विचार करें:

       const filtered = devsFiltered
          .filter(item => item.programmingLanguages
              .some(lang => lang.language == checkOption));
1
StriplingWarrior 28 सितंबर 2020, 20:03