किसी वैरिएबल से एक JS ऑब्जेक्ट प्रॉपर्टी का नाम कैसे सेट करें


178

मुझे गतिशील रूप से JS ऑब्जेक्ट प्रॉपर्टी नाम सेट करने की आवश्यकता है।

for(i=1; i<3; i++) {
    var key  = i+'name';

    data = {
        key : 'name1',
    }
}

परिणाम होना चाहिए:

data = {
    1name: 'name1'
    2name: 'name1'
}

यदि वे अनुक्रमिक हैं, तो आप एक ऐरे का उपयोग क्यों नहीं कर रहे हैं?
epascarello

मैं जानना चाहता हूं कि आप में से किसने गलत तीर मारा। C'mon, fess up।
चार्ल्स

जवाबों:


194
var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}

4
नीचे मूसा की प्रतिक्रिया भी सही ढंग से बताती है कि [] संकेतन का उपयोग वास्तव में इसे करने का एकमात्र तरीका है।
डेनिस प्लूनिक

1
यह भी ध्यान दें कि @ चिलनट की प्रतिक्रिया अब ईएस 6 का उपयोग करने के सबसे आसान तरीके का वर्णन करती है
रामबोसा

1
दरअसल, नए सिंटैक्स के साथ ओपी जो हासिल करने की कोशिश कर रहा है वह केवल तभी संभव होगा जब लूप की सीमा हार्डकोड और छोटी हो।
मूसा

168

आपको []कुंजी को गतिशील रूप से सेट करने के लिए नोटेशन का उपयोग करना होगा ।

var jsonVariable = {};
for(i=1; i<3; i++) {        
 var jsonKey  = i+'name';
 jsonVariable[jsonKey] = 'name1';

}

अब ES6 में आप ऑब्जेक्ट कील सिंटैक्स का उपयोग गतिशील रूप से ऑब्जेक्ट कुंजी बनाने के लिए कर सकते हैं, बस चर को अंदर लपेटें []

var key  = i + 'name';
data = {
    [key] : 'name1',
}

3
jsonVariable = {}; लूप के लिए अंदर इनिशियलाइज़ नहीं किया जाना चाहिए।
बंद

इसके अलावा आप यहां jsonVariable Global बना रहे हैं
Dennis Plucinik

130

ECMAScript 6 के साथ, आप वस्तु शाब्दिक सिंटैक्स के साथ चर संपत्ति के नाम का उपयोग कर सकते हैं, जैसे:

var keyName = 'myKey';
var obj = {
              [keyName]: 1
          };
obj.myKey;//1

यह सिंटैक्स निम्नलिखित नए ब्राउज़रों में उपलब्ध है:

एज 12+ (नो आईई सपोर्ट), एफएफ 34+, क्रोम 44+, ओपेरा 31+, सफारी 7.1+

( https://kangax.github.io/compat-table/es6/ )

आप एक का उपयोग करके पुराने ब्राउज़र के लिए समर्थन जोड़ सकते हैं transpiler जैसे कोलाहल । यदि आप के रूप में ऐसी बंडलर एक मॉड्यूल का उपयोग कर रहे एक पूरी परियोजना transpile करने के लिए आसान है रोलअप या webpack


2
भयानक ES6 वाक्यविन्यास जोड़ने के लिए धन्यवाद
rambossa

ES6 के बिना मैं var पेलोड = {डायनामिकके: वैल} को परिभाषित नहीं कर सकता, मुझे var पेलोड = {} और पेलोड [वैरिएननेम] = वैल करने की आवश्यकता है।
साईनाथ SR

23

यह मूल्य को गतिशील रूप से सेट करने का तरीका है

var jsonVariable = {};
for (var i = 1; i < 3; i++) {
    var jsonKey = i + 'name';
    jsonVariable[jsonKey] = 'name' + i;
}

20

ऑब्जेक्ट कुंजी के रूप में एक चर का उपयोग करें

let key = 'myKey';

let data = {[key] : 'name1'; }

अपनी वस्तु पर यहाँ कैसे पुनरावृत्ति करें देखें


क्या आप कृपया थोड़ा और विस्तार कर सकते हैं ताकि दूसरों को पता चल सके कि यह एक समाधान क्यों हो सकता है?
फेयरेस्ट

आपके द्वारा जोड़ी गई जानकारी ठीक है, बस कभी भी कोड के साथ जवाब न दें;)
फेजेस्टेस्ट

7

इससे कोई फर्क नहीं पड़ता कि चर कहाँ से आता है। मुख्य बात हम एक है ... वर्ग कोष्ठक "[..]" के बीच चर नाम सेट करें।

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}

यह अच्छा काम करता है, मुझे आश्चर्य है कि अगर यह सभी ब्राउज़रों / संस्करणों में काम करता है
बुध

1
jsonVariable = {}
for(i=1; i<3; i++) {        
   var jsonKey  = i+'name';
   jsonVariable[jsonKey] = 'name1'
}

यह समान होगा

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}

0

ऊपर साईनाथ एसआर की टिप्पणी की तर्ज पर, मैं Google ऐप्स स्क्रिप्ट (जो अभी तक ES6 का समर्थन नहीं करता है) में एक चर से js ऑब्जेक्ट प्रॉपर्टी का नाम सेट करने में सक्षम था, फिर ऑब्जेक्ट को परिभाषित करते हुए ऑब्जेक्ट के बाहर किसी अन्य कुंजी / मान को परिभाषित करते हुए:

var salesperson = ...

var mailchimpInterests = { 
        "aGroupId": true,
    };

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