जावास्क्रिप्ट में किसी ऑब्जेक्ट के गुणों को कैसे पार करें: शुरुआती से विशेषज्ञ तक
\n\nप्रत्येक डेवलपर जो JavaScript में कोड लिखता है, देर-सबेर इस कार्य का सामना करता है: "मैं किसी ऑब्जेक्ट के सभी गुणों पर कैसे जाऊं?" यदि आप arrays के साथ काम करने के आदी हैं, जहाँ for, forEach और map हैं, तो ऑब्जेक्ट्स थोड़े अवज्ञाकारी लग सकते हैं। लेकिन निराश न हों! इस लेख में, हम JavaScript में किसी ऑब्जेक्ट पर इटरेशन के सभी तरीकों पर चर्चा करेंगे - क्लासिक for...in से लेकर आधुनिक Object.keys(), Object.values() और Object.entries() तक।
हम केवल सिंटैक्स नहीं दिखाएंगे। हम विश्लेषण करेंगे कि किसी विशिष्ट कार्य के लिए कौन सी विधि चुननी है, कौन से नुकसान मौजूद हैं, और विरासत में मिले गुणों के साथ गलती कैसे न करें। चलिए शुरू करते हैं!
\n\nJavaScript में ऑब्जेक्ट क्या है और इसे क्यों पार करना आवश्यक है?
\n\nऑब्जेक्ट "कुंजी: मान" जोड़ियों का एक संग्रह है। array के विपरीत, जहाँ तत्व इंडेक्स द्वारा क्रमबद्ध होते हैं, ऑब्जेक्ट में गुणों के क्रम की गारंटी नहीं होती है (हालाँकि आधुनिक इंजन इसे बनाए रखने का प्रयास करते हैं)।
\n\nकल्पना करें कि आपके पास उपयोगकर्ता डेटा वाला एक ऑब्जेक्ट है:
\n\nconst user = {\n name: 'अन्ना',\n age: 28,\n city: 'मॉस्को',\n isAdmin: false\n};\n\nआपको सभी डेटा स्क्रीन पर प्रदर्शित करना है, उन्हें सर्वर पर भेजना है, या बस कुछ गणना करनी है। इटरेशन के बिना, आपको user.name, user.age आदि लिखना होगा - यह लचीला नहीं है और स्केलेबल नहीं है। और यदि ऑब्जेक्ट में 50 गुण हों? तब इटरेशन विधियाँ काम आती हैं।
विधि #1: क्लासिक for...in
\n\nकिसी ऑब्जेक्ट के गुणों को पार करने का सबसे पुराना और सीधा तरीका for...in लूप का उपयोग करना है। इसे विशेष रूप से ऑब्जेक्ट्स के लिए बनाया गया था।
const user = {\n name: 'अन्ना',\n age: 28,\n city: 'मॉस्को'\n};\n\nfor (let key in user) {\n console.log(key + ': ' + user[key]);\n}\n// आउटपुट:\n// name: अन्ना\n// age: 28\n// city: मॉस्को\n\nयहाँ key गुण का नाम (स्ट्रिंग मान) है, और user[key] इसका मान है।
महत्वपूर्ण! for...in न केवल ऑब्जेक्ट के अपने गुणों को, बल्कि उन गुणों को भी पार करता है जो प्रोटोटाइप श्रृंखला के माध्यम से विरासत में मिले हैं। इससे अप्रत्याशित परिणाम हो सकते हैं, खासकर यदि आपने बिल्ट-इन ऑब्जेक्ट्स के प्रोटोटाइप का विस्तार किया है (जो आपको नहीं करना चाहिए, लेकिन हो सकता है)।
इससे बचने के लिए, hasOwnProperty विधि का उपयोग करें:
for (let key in user) {\n if (user.hasOwnProperty(key)) {\n console.log(key + ': ' + user[key]);\n }\n}\n\nआधुनिक विकल्प Object.hasOwn() (ES2022) है:
for (let key in user) {\n if (Object.hasOwn(user, key)) {\n console.log(key + ': ' + user[key]);\n }\n}\n\nfor...in का उपयोग कब करें? जब आपको गुणों के नाम (कुंजियाँ) चाहिए और आप सुनिश्चित हैं कि आप विरासत में मिले गुणों का सामना नहीं करेंगे। या जब आप लिटरल {} से बने सरल ऑब्जेक्ट्स के साथ काम कर रहे हों।
विधि #2: Object.keys() — कुंजियों की एक array प्राप्त करें
\n\nObject.keys() विधि ऑब्जेक्ट के अपने (गैर-विरासत में मिले) गणनीय गुणों की एक array लौटाती है। आज के समय में यह इटरेशन का सबसे लोकप्रिय और सुरक्षित तरीका है।
const user = {\n name: 'अन्ना',\n age: 28,\n city: 'मॉस्को'\n};\n\nconst keys = Object.keys(user);\nconsole.log(keys); // ['name', 'age', 'city']\n\n// अब आप forEach या for...of का उपयोग कर सकते हैं\nkeys.forEach(key => {\n console.log(key + ': ' + user[key]);\n});\n\nलाभ: आपको एक सामान्य array मिलता है, जिसके साथ आप जो चाहें कर सकते हैं - फ़िल्टर करना, मैप करना, सॉर्ट करना।
\n\nफ़िल्टरिंग के साथ उदाहरण:
\n\nconst filteredKeys = Object.keys(user).filter(key => key !== 'isAdmin');\nfilteredKeys.forEach(key => console.log(user[key]));\n\nObject.keys() का उपयोग कब करें? लगभग हमेशा