কোনও ভেরিয়েবল থেকে জেএস বস্তুর সম্পত্তি নাম কীভাবে সেট করবেন To


177

আমি একটি জেএস অবজেক্ট সম্পত্তি নাম গতিশীল সেট করা প্রয়োজন।

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

    data = {
        key : 'name1',
    }
}

ফলাফল হওয়া উচিত:

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

যদি সেগুলি ক্রমিক হয় তবে আপনি কেন অ্যারে ব্যবহার করছেন না?
এপাসকারেলো

আপনারা তিনজনে ভুল তীরটি মারছেন তা আমি জানতে চাই। কমন, হতাশ।
চার্লস

উত্তর:


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

4
নীচে মুসার প্রতিক্রিয়াও সঠিকভাবে স্পষ্ট করে দেয় যে [] স্বরলিপি ব্যবহার করা আসলে এটি করার একমাত্র উপায়।
ডেনিস প্লুসিনিক

1
আরও মনে রাখবেন যে @ চিলনটের প্রতিক্রিয়া নীচে এখন ES6 ব্যবহার করে এটি করার সহজতম উপায়টি বর্ণনা করেছে
রাম্বোসা

1
আসলে, নতুন সিনট্যাক্সের সাহায্যে ওপি যা অর্জন করতে চাইছে তা কেবল তখনই সম্ভব হবে যদি লুপের সীমাটি হার্ডকোডযুক্ত এবং ছোট হয়।
মুসা

166

[]পরিবর্তনশীল কীগুলি সেট করতে আপনাকে স্বরলিপি ব্যবহার করতে হবে ।

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 = {}; লুপ জন্য ভিতরে আরম্ভ করা উচিত নয়।
বন্ধ

এছাড়াও আপনি এখানে জসন পরিবর্তনশীল গ্লোবাল তৈরি করছেন
ডেনিস প্লুসিনিক

129

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 যেমন Babel । আপনি যদি রোলআপ বা ওয়েবপ্যাকের মতো কোনও মডিউল বান্ডিলার ব্যবহার করেন তবে একটি সম্পূর্ণ প্রকল্পের স্থানান্তর করা সহজ


2
দারুণ ES6 সিনট্যাক্স যুক্ত করার জন্য ধন্যবাদ
রাম্বোসা

ES6 ছাড়া আমি var payload = {গতিশীলকী: ভাল def সংজ্ঞায়িত করতে পারি না, আমাকে var payload = {} এবং পে-লোড [ভেরিয়েবলনেম] = ভাল করতে হবে।
সাইনাথ এসআর

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

উপরে সায়নাথ এসআর এর মন্তব্যের লাইন ধরে আমি গুগল অ্যাপস স্ক্রিপ্টের একটি ভেরিয়েবল থেকে জেএস অবজেক্ট সম্পত্তি নাম সেট করতে সক্ষম হয়েছি (যা এখনও ইএস 6 সমর্থন করে না) বস্তুর সংজ্ঞা দিয়ে তারপরে অবজেক্টের বাইরের অন্য কী / মানটি সংজ্ঞায়িত করে:

var salesperson = ...

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

mailchimpInterests[salesperson] = true;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.