जावास्क्रिप्ट ऑब्जेक्ट वैल्यू को गतिशील रूप से कैसे सेट करें?


98

शब्दों द्वारा मामले की व्याख्या करना मुश्किल है, मुझे एक उदाहरण दें:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

मैं जावास्क्रिप्ट ऑब्जेक्ट में चर मूल्य के साथ एक चर संपत्ति कैसे सेट कर सकता हूं?



2
करीबी नजर है। ऐसा लगता है कि आप आचार संहिता को समायोजित करना भूल गए हैं। यह होना चाहिए myObj[prop] = value;eval('myObj.'+name)काम नहीं करता है क्योंकि चर nameमौजूद नहीं है।
फेलिक्स क्लिंग

7
आपको वास्तव में varचर घोषित करने के लिए अधिक कीबोर्ड का उपयोग करना चाहिए , अधिक अर्धविरामों का उपयोग करना चाहिए , उपयोग नहीं करना चाहिए evalऔर अधिक उत्तरों को स्वीकार करना चाहिए। किया हुआ।
jAndy

आपका प्रश्न त्रुटिपूर्ण है - यह काम करता है , लेकिन आपने गलती की है। आपने लिखा " myObj[name]" जब मुझे पूरा यकीन है कि आप लिखने के लिए थे " myObj[prop]"।
अर्नेस्ट फ्रेडमैन-हिल

जवाबों:


151
myObj[prop] = value;

वह काम करना चाहिए। आपने वैरिएबल के नाम और उसके मूल्य को मिलाया। लेकिन इसके गुणों को प्राप्त करने के लिए तार के साथ किसी वस्तु को अनुक्रमित करना जावास्क्रिप्ट में ठीक काम करता है।


47
myObj.name=value

या

myObj['name']=value     (Quotes are required)

ये दोनों विनिमेय हैं।

संपादित करें: मैं अनुमान लगा रहा हूं कि आप myObj[prop] = valuemyObj [नाम] = मान के बजाय इसका मतलब है । दूसरा सिंटैक्स ठीक काम करता है: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
यदि ऑब्जेक्ट गुण आरक्षित शब्द है, तो दूसरा सिंटैक्स आवश्यक है।
टिमवैलमेल

हालांकि यह सही है, यह वास्तव में उनके सवाल का जवाब नहीं देता है; वह सोच रहा है कि जब प्रॉपर्टी का नाम चर में हो तो क्या करें।
अर्नेस्ट फ्रेडमैन-हिल

अपडेट किया गया उत्तर वहां, आपके पास nameजहां होना चाहिएprop
bcoughlan

5

आप संपत्ति को उसी तरह से प्राप्त कर सकते हैं जिस तरह से आप इसे सेट करते हैं।

foo = {
 bar: "value"
}

आपने मान सेट किया foo["bar"] = "baz";

मान प्राप्त करना foo["bar"]

"बाज" लौटाएगा।


5

आप कुछ ऐसा भी बना सकते हैं जो एक मान ऑब्जेक्ट (आवाज) के समान होगा;

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

बस तुम कर सकते हो;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

जब आप कोई वस्तु बनाते myObjहैं, तो उसे एक शब्दकोश की तरह समझें। इस मामले में, इसकी दो कुंजी हैं name, औरage

आप इन शब्दकोशों को दो तरीकों से एक्सेस कर सकते हैं:

  • एक सरणी की तरह (उदाहरण के लिए) myObj[name] ); या
  • एक संपत्ति की तरह (जैसे myObj.name); ध्यान दें कि कुछ गुण आरक्षित हैं, इसलिए पहली विधि पसंद की जाती है।

आपको इसे बिना किसी समस्या के संपत्ति के रूप में एक्सेस करने में सक्षम होना चाहिए। हालांकि, इसे एक सरणी के रूप में एक्सेस करने के लिए, आपको एक स्ट्रिंग की तरह कुंजी का इलाज करना होगा।

myObj["name"]

अन्यथा, जावास्क्रिप्ट यह मान लेगा कि nameएक चर है, और जब से आपने नामक चर नहीं बनाया है name, तो वह उस कुंजी तक पहुंचने में सक्षम नहीं होगा जो आप उम्मीद कर रहे हैं।


1
अभी भी myObj[name]और myObj.nameहालांकि, के बीच एक अंतर है , क्योंकि पूर्व एक चर नाम और दूसरा शाब्दिक कुंजी को संदर्भित करता है।
pimvdb

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.