javascript - जावास्क्रिप्ट में स्ट्रिंग को परिवर्तनीय नाम में कनवर्ट करें



variables (8)

मैंने समाधान की तलाश की है, लेकिन वह काम नहीं मिला।

मेरे पास केवल onlyVideo नामक चर है।

"onlyVideo" स्ट्रिंग एक समारोह में पारित हो जाता है। मैं कुछ के रूप में फ़ंक्शन के अंदर वेरिएबल केवल onlyVideo सेट करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

(ऐसे कई चर हैं जिन्हें फ़ंक्शन में बुलाया जा सकता है, इसलिए मुझे गतिशील रूप से काम करने की आवश्यकता है, if कथन में कठोर कोड नहीं किया गया है।)

संपादित करें: ऐसा करने का शायद एक बेहतर तरीका है जिसे आप करने का प्रयास कर रहे हैं। मैंने इसे अपने जावास्क्रिप्ट साहसिक में जल्दी से पूछा। जांचें कि जावास्क्रिप्ट ऑब्जेक्ट कैसे काम करते हैं।

एक सरल परिचय:

// create JavaScript object
var obj = { "key1": 1 };

// assign - set "key2" to 2
obj.key2 = 2;

// read values
obj.key1 === 1;
obj.key2 === 2;

// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;

// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;

Answers

जावास्क्रिप्ट में ऐसे अवसरों के लिए एक eval() फ़ंक्शन है:

function (varString) {
  var myVar = eval(varString);
  // .....
}

संपादित करें: क्षमा करें, मुझे लगता है कि मैंने प्रश्न को बहुत जल्दी स्किम किया। यह केवल आपको वैरिएबल प्राप्त करेगा, इसे सेट करने के लिए आपको इसकी आवश्यकता होगी

function SetTo5(varString) {
  var newValue = 5;
  eval(varString + " = " + newValue);
}

या यदि एक स्ट्रिंग का उपयोग कर रहे हैं:

function SetToString(varString) {
  var newValue = "string";
  eval(varString + " = " + "'" + newValue + "'");
}

लेकिन मुझे लगता है कि आप जो खोज रहे हैं उसे पूरा करने के लिए एक और उचित तरीका है? मुझे नहीं लगता कि eval () ऐसा कुछ है जिसे आप वास्तव में उपयोग करना चाहते हैं जब तक इसके लिए कोई बड़ा कारण न हो। eval()


यह इस तरह किया जा सकता है

(function(X, Y) {
  
  // X is the local name of the 'class'
  // Doo is default value if param X is empty
  var X = (typeof X == 'string') ? X: 'Doo';
  var Y = (typeof Y == 'string') ? Y: 'doo';
  
  // this refers to the local X defined above
  this[X] = function(doo) {
    // object variable
    this.doo = doo || 'doo it';
  }
  // prototypal inheritance for methods
  // defined by another
  this[X].prototype[Y] = function() {
    return this.doo || 'doo';
  };
  
  // make X global
  window[X] = this[X];
}('Dooa', 'dooa')); // give the names here

// test
doo = new Dooa('abc');
doo2 = new Dooa('def');
console.log(doo.dooa());
console.log(doo2.dooa());


जहां तक ​​eval बनाम वैश्विक परिवर्तनीय समाधान ...

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

var tempNamespace = {};
var myString = "myVarProperty";

tempNamespace[myString] = 5;

निश्चित रूप से आप तब तक tempNamespace.myVarProperty (अब 5) के रूप में उपयोग कर सकते हैं, स्टोरेज के लिए विंडो का उपयोग करने से परहेज कर सकते हैं। (स्ट्रिंग को सीधे ब्रैकेट में भी रखा जा सकता है)


यदि आप किसी ऑब्जेक्ट की प्रॉपर्टी तक पहुंचने का प्रयास कर रहे हैं, तो आपको window के दायरे से शुरू करना होगा और ऑब्जेक्ट की प्रत्येक प्रॉपर्टी के माध्यम से जाना होगा जब तक कि आप जो चाहते हैं उसे प्राप्त न करें। यह मानते हुए कि abc को स्क्रिप्ट में कहीं और परिभाषित किया गया है, आप निम्न का उपयोग कर सकते हैं:

var values = window;
var str = 'a.b.c'.values.split('.');

for(var i=0; i < str.length; i++)
    values = values[str[i]];

यह किसी भी वस्तु की संपत्ति प्राप्त करने के लिए काम करेगा, इससे कोई फर्क नहीं पड़ता कि यह कितना गहरा है।


var myString = "echoHello";

window[myString] = function() {
    alert("Hello!");
}

echoHello();

बुराई eval करने के लिए कहो नहीं। यहां उदाहरण: http://fiddle.jshell.net/Shaz/WmA8t/


विंडो ['variableName'] विधि केवल तभी काम करती है जब वैरिएबल को वैश्विक दायरे में परिभाषित किया गया हो। सही जवाब "रिएक्टर" है। यदि आप "ऑब्जेक्ट" संदर्भ प्रदान कर सकते हैं तो एक संभावित सामान्य समाधान मौजूद है, लेकिन कुछ चर हैं जो वैरिएबल के दायरे के आधार पर कोई वैश्विक फ़ंक्शन हल नहीं कर सकता है।

(function(){
    var findMe = 'no way';
})();

यदि यह एक वैश्विक चर है तो window[variableName] या अपनी केस window["onlyVideo"] में चाल window["onlyVideo"] चाहिए।


इस पर निर्भर करता है कि आप खाली जगह रखना चाहते हैं या नहीं।

यदि आप एक खाली स्लॉट चाहते हैं, तो हटाएं ठीक है:

delete array[ index ];

यदि आप नहीं करते हैं, तो आपको splice विधि का उपयोग करना चाहिए:

array.splice( index, 1 );

और यदि आपको उस आइटम के मान की आवश्यकता है, तो आप केवल लौटे सरणी के तत्व को स्टोर कर सकते हैं:

var value = array.splice( index, 1 )[0];

यदि आप इसे किसी क्रम में करना चाहते हैं, तो आप पहले के लिए array.pop() उपयोग कर सकते हैं या array.shift() पहले के लिए (और दोनों आइटम के मान को भी वापस कर सकते हैं)।

और यदि आप आइटम की अनुक्रमणिका नहीं जानते हैं, तो आप इसे प्राप्त करने के लिए array.indexOf( item ) का उपयोग कर सकते हैं array.indexOf( item ) एक if() में एक आइटम प्राप्त करने के लिए या while() )। array.indexOf( item ) या तो नहीं मिला तो सूचकांक या -1 देता है।





javascript variables