दिलचस्प पोस्ट
WPF C # पथ: कोड में ज्यामिति को पथ डेटा के साथ स्ट्रिंग से कैसे प्राप्त करें (XAML में नहीं) जी में ggplot2 का उपयोग कर, मैं विभिन्न क्षेत्रों में एक ग्राफ के विभिन्न रंगों की पृष्ठभूमि कैसे बना सकता हूं? आईडी के साथ json ऑब्जेक्ट से एक दृढ़ता से टाइप किया गया सी # ऑब्जेक्ट को नाम के रूप में बनाएं आप अपने कोको एप्लिकेशन को डिफ़ॉल्ट वेब ब्राउज़र के रूप में कैसे सेट करते हैं? पायथन सूची निर्देशिका, उपनिर्देशिका, और फ़ाइलें वीएस2017 में SQLite प्रदाता AngularJS घड़ी डोम परिवर्तन बैकस्लैश दो बार क्यों दिखाई देते हैं? UILocalNotification रद्द करें मशीनीज और जावास्क्रिप्ट उस फ़ंक्शन के भीतर से फ़ंक्शन का नाम कैसे प्राप्त करें? केवल OpenGL विधियों का उपयोग कर पाठ कैसे आकर्षित करें? ES6 एरो फ़ंक्शंस में `तर्कों 'पर आधिकारिक जानकारी आर में डेटा फ्रेम से स्तरीकृत यादृच्छिक नमूना जावा में http फ़ाइल डाउनलोड फिर से शुरू करें

मैं जावास्क्रिप्ट ऑब्जेक्ट वैरिएबल में डुनेबल की गतिशील कुंजी कैसे बनाऊं?

मैं इस तरह से कुछ कोशिश कर रहा हूँ, लेकिन यह उदाहरण काम नहीं करता है

jsObj = {}; for (var i = 1; i <= 10; i++) { jsObj{'key' + i} = 'example ' + 1; } 

इस तरह एक गतिशील कुंजी बनाने के लिए मैं क्या कर सकता हूँ?

वेब के समाधान से एकत्रित समाधान "मैं जावास्क्रिप्ट ऑब्जेक्ट वैरिएबल में डुनेबल की गतिशील कुंजी कैसे बनाऊं?"

वर्ग कोष्ठक:

 jsObj['key' + i] = 'example' + 1; 

जावास्क्रिप्ट में, सभी सरणी ऑब्जेक्ट हैं, लेकिन सभी ऑब्जेक्ट्स सरणी नहीं हैं प्राथमिक अंतर (और जो सीधे जावास्क्रिप्ट और सादे ऑब्जेक्ट्स के साथ नकल करना बहुत मुश्किल है) यह है कि सरणी उदाहरण length संपत्ति को बनाए रखता है, जिससे वह संपत्ति के अंकीय मूल्य को दर्शाता है जिसका नाम संख्यात्मक होता है और जिसका मान, जब किसी संख्या में परिवर्तित किया जाता है, ऐसे सभी गुणों में सबसे बड़ा है यह वास्तव में अजीब लगता है, लेकिन इसका मतलब यह है कि सरणी उदाहरण दिए गए हैं, "0" , "5" , "207" , और इसी तरह के नामों वाले गुणों का विशेष रूप से इलाज किया जाता है, क्योंकि उनका अस्तित्व length का मूल्य निर्धारित करता है और, उसके ऊपर, length का मान ऐसे गुणों को हटाने के लिए सेट किया जा सकता है सरणी की length को 0 प्रभावी रूप से सभी गुणों को निकालता है, जिनके नाम पूरे संख्या की तरह दिखते हैं।

ठीक है, तो यही एक सरणी विशेष बनाता है हालांकि, जावास्क्रिप्ट [ ] ऑपरेटर कैसे काम करता है, इसके साथ में कुछ भी नहीं है। वह ऑपरेटर एक ऑब्जेक्ट प्रॉपर्टी एक्सेस मैकेनिज़्म है जो किसी ऑब्जेक्ट पर काम करता है। यह ध्यान रखना महत्वपूर्ण है कि उस संख्यात्मक सरणी संपत्ति के नाम विशेष रूप से नहीं हैं, जहां तक ​​सरल संपत्ति पहुंच जाता है। वे सिर्फ तार हैं जो संख्याओं की तरह लगते हैं, लेकिन जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी नाम किसी भी प्रकार की स्ट्रिंग आप पसंद कर सकते हैं।

इस प्रकार, जिस तरह से [ ] ऑपरेटर एक सरणी के माध्यम से चलने वाली लूप में काम करता है:

 for (var i = 0; i < myArray.length; ++i) { var value = myArray[i]; // property access // ... } 

वास्तव में कोई रास्ता नहीं है [ ] एक संपत्ति का उपयोग करते समय काम करता है जिसका नाम कुछ गणना स्ट्रिंग है:

 var value = jsObj["key" + i]; 

[ ] ऑपरेटर वहाँ दोनों उदाहरणों में ठीक उसी चीज कर रहा है तथ्य यह है कि एक मामले में शामिल ऑब्जेक्ट एक अरैम होता है, दूसरे शब्दों में, महत्वहीन है।

[ ] का उपयोग करके संपत्ति के मूल्यों को सेट करते समय, कहानी एक ही है, जबकि length संपत्ति बनाए रखने के विशेष व्यवहार को छोड़कर यदि आप सरणी उदाहरण पर एक संख्यात्मक कुंजी के साथ एक संपत्ति सेट करते हैं:

 myArray[200] = 5; 

फिर (मान लें कि "200" सबसे बड़ी संख्यात्मक संपत्ति का नाम है) length संपत्ति 201 के लिए संपत्ति असाइनमेंट के साइड-प्रभाव के रूप में अद्यतन किया जाएगा। यदि एक ही बात एक सादे वस्तु के लिए किया जाता है, हालांकि:

 myObj[200] = 5; 

ऐसा कोई साइड इफेक्ट नहीं है दोनों सरणी और वस्तु का "200" नामक संपत्ति को मान 5 सेट किया जाएगा अन्यथा ठीक उसी तरह से।

कोई सोच सकता है कि क्योंकि उस length व्यवहार काफ़ी आसान है, आप सादे ऑब्जेक्ट्स के बजाय ऐरे कन्स्ट्रक्टर के सभी ऑब्जेक्ट उदाहरणों को भी बना सकते हैं। इसके बारे में सीधा गलत बात नहीं है (हालांकि यह भ्रामक हो सकता है, खासकर कुछ अन्य भाषाओं से परिचित लोगों के लिए, कुछ गुणों को length में शामिल करने के लिए, लेकिन अन्य नहीं)। हालांकि, यदि आप JSON सीरियलाइजेशन (एक काफी सामान्य बात) के साथ काम कर रहे हैं, तो समझ लें कि सरणी उदाहरणों को ऐसे तरीके से क्रमबद्ध किया जाता है जो केवल संख्यात्मक-नामित गुणों को शामिल करता है सरणी में जोड़े जाने वाले अन्य गुण कभी सीरियल किए गए जेएसओएन फॉर्म में नहीं दिखाई देंगे। उदाहरण के लिए:

 var obj = []; obj[0] = "hello world"; obj["something"] = 5000; var objJSON = JSON.stringify(obj); 

"objJSON" का मान एक स्ट्रिंग होगा जिसमें केवल ["hello world"] ; "कुछ" संपत्ति खो जाएगी

ES2015:

यदि आप ईएस 6 जावास्क्रिप्ट सुविधाओं का उपयोग करने में सक्षम हैं, तो आप इसे आसानी से संभालने के लिए कम्प्यूटेंट प्रॉपर्टी नाम का उपयोग कर सकते हैं:

 var key = 'DYNAMIC_KEY', obj = { [key]: 'ES6!' }; console.log(obj); // > { 'DYNAMIC_KEY': 'ES6!' } 

जावास्क्रिप्ट में एसोसिएटिव एरेन्स सचमुच काम नहीं करते हैं क्योंकि वे अन्य भाषाओं में करते हैं। for each बयान के लिए जटिल हैं (क्योंकि वे विरासत में मिली प्रोटोटाइप गुणों की गणना करते हैं)। आप एक ऑब्जेक्ट / एसोसिएटिव सरणी पर गुणों को घोषित कर सकते हैं जैसे पॉइंटी का उल्लेख किया गया है, लेकिन वास्तव में इस प्रकार की चीज़ के लिए आपको push विधि के साथ एक सरणी का उपयोग करना चाहिए:

 jsArr = []; for (var i = 1; i <= 10; i++) { jsArr.push('example ' + 1); } 

बस यह नहीं भूलें कि अनुक्रमित सरणियां शून्य-आधारित हैं, इसलिए पहला तत्व जेएसएआर [0] होगा, जेएसएआरआर [1] नहीं होगा।