मैं सरणी में ऑब्जेक्ट खोजने के लिए इस विधि का उपयोग करता हूं:

lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
arr.push(found);

समस्या यह है कि यदि तत्व नहीं मिला तो उसने इसे undefined के रूप में सरणी arr में जोड़ दिया। इससे कैसे बचें?

यह कुंजी के साथ तत्व क्यों नहीं ढूंढता है: "विषय आईडी":

let objKey = 7047;
let k = "subjectId";
let v = 7047;

found = this.obj[objKey].filter(item => item[k] == v);

console.log(found);// undefined

enter image description here

0
dooglu 2 अप्रैल 2018, 18:48

3 जवाब

सबसे बढ़िया उत्तर

फ़ंक्शन filter वापस नहीं आएगा undefined, इसके बजाय एक खाली सरणी लौटाएगा (यदि कोई भी तत्व शर्त को पूरा नहीं करता है)

समस्या यह है कि यदि तत्व नहीं मिला तो उसने इसे undefined के रूप में सरणी arr में जोड़ दिया।

आप शायद एक विशिष्ट तत्व खोजना चाहते हैं, इसलिए, मैं आपको फ़ंक्शन find का उपयोग करने की सलाह देता हूं यदि आप केवल एक इंडेक्स वाले ऐरे के बजाय केवल एक ऑब्जेक्ट चाहते हैं।

lat arr = [];
found = this.obj[objKey].find(item => item[internKeyName] == 7047);
if (found) arr.push(found);
2
Ele 2 अप्रैल 2018, 15:58

आप वांछित वस्तुओं के साथ एक विस्तृत सरणी को सीधे धक्का दे सकते हैं, खाली सरणियाँ नहीं फैली हुई हैं (स्प्रेड सिंटैक्स ...)।

arr.push(...this.obj[objKey].filter(item => item[internKeyName] == 7047));
2
Nina Scholz 2 अप्रैल 2018, 16:14

आप इसे सरणी में धकेलने से पहले लंबाई found की जांच करके इससे बच सकते हैं।

lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
found.length > 0 && arr.push(...found);

मैं पुश करने के लिए स्प्रेड सिंटैक्स का उपयोग कर रहा हूं प्रत्येक तत्व को नई सरणी में अपने स्वयं के आइटम के रूप में, जो मुझे लगता है कि आप यही चाहते हैं। आप ... को हटा सकते हैं यदि आप चाहते हैं कि सभी पाए गए आइटम अपने स्वयं के सरणी आइटम हों।

5
Get Off My Lawn 2 अप्रैल 2018, 16:05