JavaScript ऐरे में कोई तत्व है या नहीं कैसे जाँचें? «बस काम करता है» से «उड़ता है» तक
\n\nक्या आपने कभी कोड लिखा है और अचानक डेटा के एक ऐरे को देखकर ठिठक गए हैं? «क्या यहाँ वह है जो मुझे चाहिए?» — यह सवाल हर डेवलपर को परेशान करता है। Stack Overflow पर How do I check if an array includes a value in JavaScript विषय ने लाखों व्यूज़ जुटाए हैं। और यह सही भी है। मामूली लगने वाला यह कार्य न केवल कोड की पठनीयता बल्कि पूरे एप्लिकेशन की गति को भी प्रभावित करता है।
\n\nआज हम JavaScript ऐरे में तत्व की उपस्थिति की जाँच के सभी तरीकों पर चर्चा करेंगे। हम केवल विधियाँ नहीं दिखाएँगे — हम एक वास्तविक प्रदर्शन जाँच करेंगे। आप जानेंगे कि includes() का उपयोग कब करें, indexOf() कभी-कभी तेज़ क्यों होता है, और Set आपके कोड को दस गुना तेज़ कैसे बना सकता है। चलिए शुरू करते हैं!
क्लासिक तरीका: Array.prototype.includes()
\n\nसबसे आधुनिक और पढ़ने योग्य तरीका है includes() विधि। यह ES2016 में आया और जल्दी ही डी-फैक्टो मानक बन गया। क्यों? क्योंकि इसका नाम ही अपने आप में सब कुछ कहता है।
\n\nconst fruits = ['apple', 'banana', 'mango', 'orange'];\nconst hasBanana = fruits.includes('banana');\nconsole.log(hasBanana); // true\n\nconst hasGrape = fruits.includes('grape');\nconsole.log(hasGrape); // false\n\n\nसब कुछ सरल और सुंदर है। includes() सख्त तुलना (===) का उपयोग करता है, इसलिए डेटा प्रकारों से सावधान रहें:
const numbers = [1, 2, 3];\nconsole.log(numbers.includes('1')); // false — स्ट्रिंग संख्या के बराबर नहीं है\n\n\nलाभ:
\n- \n
- पठनीयता 10/10 — कोड एक नौसिखिए के लिए भी समझ में आता है \n
NaNके साथ काम करता है (indexOfके विपरीत) \n - सभी आधुनिक ब्राउज़रों द्वारा समर्थित \n
नुकसान:
\n- \n
- रैखिक जटिलता O(n) — पूरे ऐरे को पार करता है \n
- यदि तत्व का इंडेक्स खोजना हो तो उपयुक्त नहीं \n
पुराना अनुभवी: Array.prototype.indexOf()
\n\nincludes() के आने से पहले सभी indexOf() का उपयोग करते थे। यह विधि पहले मिले तत्व का इंडेक्स लौटाती है या -1 यदि तत्व मौजूद नहीं है।
const fruits = ['apple', 'banana', 'mango'];\nconst index = fruits.indexOf('banana');\nif (index !== -1) {\n console.log('तत्व स्थिति पर पाया गया', index);\n} else {\n console.log('तत्व नहीं मिला');\n}\n\n\nकई लोग इस जाँच के आदी हैं, और यह अभी भी काम करता है। लेकिन एक महत्वपूर्ण बारीकी है: indexOf() NaN को खोजने में असमर्थ है।
\n\nconst arr = [NaN];\nconsole.log(arr.indexOf(NaN)); // -1 — नहीं मिलता!\nconsole.log(arr.includes(NaN)); // true — मिल जाता है\n\n\nयह इसलिए है क्योंकि JavaScript में NaN !== NaN है, और indexOf सख्त तुलना का उपयोग करता है। जबकि includes() SameValueZero एल्गोरिदम का उपयोग करता है, जो NaN को सही ढंग से संभालता है।
indexOf का उपयोग कब करें?
\n- \n
- यदि आपको तत्व का इंडेक्स चाहिए, न कि केवल उपस्थिति \n
- यदि आप सुनिश्चित हैं कि ऐरे में NaN नहीं है \n
- लेगसी कोड में जहाँ ES2016+ का उपयोग नहीं किया जा सकता \n
लचीला योद्धा: Array.prototype.find() और findIndex()
\n\nजब केवल उपस्थिति नहीं बल्कि शर्त की जाँच करनी हो, तो find() मदद करता है। यह एक कॉलबैक फ़ंक्शन लेता है और शर्त को पूरा करने वाला पहला तत्व लौटाता है, या undefined लौटाता है।
const users = [\n { id: 1, name: 'Alice', age: 25 },\n { id: 2, name: 'Bob', age: 30 },\n { id: 3, name: 'Charlie', age: 35 }\n];\n\nconst user = users.find(u => u.age > 28);\nconsole.log(user); // { id: 2, name: 'Bob', age: 30 }\n\n// अस्तित्व की जाँच\nconst exists = users.find(u => u.id === 4) !== undefined;\nconsole.log(exists); // false