নাম হিসাবে একটি ভেরিয়েবল ব্যবহার করে একটি জাভাস্ক্রিপ্ট অবজেক্টে একটি সম্পত্তি যুক্ত করবেন?


277

আমি jQuery এর সাহায্যে আইটেমগুলি ডিওএম থেকে টেনে আনছি idএবং ডিওএম উপাদানটির ব্যবহার করে কোনও বস্তুর উপর একটি সম্পত্তি সেট করতে চাই ।

উদাহরণ

const obj = {}

jQuery(itemsFromDom).each(function() {
  const element = jQuery(this)
  const name = element.attr('id')
  const value = element.attr('value')

  // Here is the problem
  obj.name = value
})

যদি "মাইআইডি" এর itemsFromDomসাথে কোনও উপাদান অন্তর্ভুক্ত থাকে তবে idআমি obj"মাইআইডি" নামের একটি সম্পত্তি রাখতে চাই । উপরের আমাকে দেয় name

আমি কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে কোনও ভেরিয়েবল ব্যবহার করে কোনও সামগ্রীর সম্পত্তির নাম দেব?



উত্তর:


469

আপনি এই সমতুল্য বাক্য গঠন ব্যবহার করতে পারেন:

obj[name] = value

122

সঙ্গে ECMAScript প্রোগ্রামিং 2015 আপনি বন্ধনী নোটেশন ব্যবহার করে বস্তুর ঘোষণায় সরাসরি করতে পারেন:

var obj = {
  [key]: value
}

যে keyকোনও ধরণের অভিব্যক্তি (যেমন একটি ভেরিয়েবল) যেখানে কোনও মান প্রদান করতে পারে:

var obj = {
  ['hello']: 'World',
  [x + 2]: 42,
  [someObject.getId()]: someVar
}

13
এই প্রশ্নটি বিদ্যমান অবজেক্টটি সংশোধন করার বিষয়ে, একটি নতুন তৈরি করার নয়।
মিশা পেরেকোভস্কি

28
এই বিশেষ প্রশ্নটি সংশোধন করার বিষয়ে হতে পারে তবে এটি অন্যান্য প্রশ্নগুলির দ্বারা উল্লেখ করা হয় যা গতিশীলভাবে অবজেক্ট তৈরি করার বিষয়ে এবং তাই আমি এখানেই শেষ হয়েছি এবং আনন্দের সাথে এই উত্তরটি থেকে উপকৃত হয়েছি।
অলিভার লয়েড

2
@ WOXOm LOL হ্যাঁ আমি obj[name]=valueযখন আপনার পরামর্শটি পরিবর্তে কেবল আপনার পরামর্শটি ব্যবহার করতে পারলাম তখন কেন আমি ঝামেলা করে যাব
চিলনিট

2
আমি ECMAScript 6 কী তা নিশ্চিত নই, তবে আমি এটির খুব প্রশংসা করি
আর্থার তারাসভ

2
@ আর্থারতারাসভ: ইসিএমএসক্রিপ্ট 6 কে আরও আনুষ্ঠানিকভাবে ECMAScript 2015 ("ES2015") ওরফে ECMAScript 6th ষ্ঠ সংস্করণ ("ES6") বলা হয়। এটি জাভাস্ক্রিপ্টের জুন 2015 এর প্রকাশের স্পেসিফিকেশন then এর পর থেকে আমাদের ES2016 হয়েছে এবং শীঘ্রই আমাদের ES2017 হবে, তারা এখন একটি বার্ষিক চক্রে রয়েছে।
টিজে ক্রাউডার

12

এমনকি আপনি এই জাতীয় বস্তুর তালিকা তৈরি করতে পারেন

var feeTypeList = [];
$('#feeTypeTable > tbody > tr').each(function (i, el) {
    var feeType = {};

    var $ID = $(this).find("input[id^=txtFeeType]").attr('id');

    feeType["feeTypeID"] = $('#ddlTerm').val();
    feeType["feeTypeName"] = $('#ddlProgram').val();
    feeType["feeTypeDescription"] = $('#ddlBatch').val();

    feeTypeList.push(feeType);
});

6

বস্তুর বৈশিষ্ট্য অ্যাক্সেস করার জন্য দুটি পৃথক স্বরলিপি রয়েছে

  • ডট স্বরলিপি: myObj.prop1
  • বন্ধনী স্বরলিপি: myObj ["প্রোপ 1"]

ডট স্বরলিপি দ্রুত এবং সহজ তবে আপনার অবশ্যই প্রকৃত সম্পত্তির নামটি স্পষ্টভাবে ব্যবহার করতে হবে । কোনও বিকল্প, ভেরিয়েবল ইত্যাদি নেই

বন্ধনী চিহ্নিতকরণ খোলা সমাপ্ত। এটি একটি স্ট্রিং ব্যবহার করে তবে আপনি কোনও আইনি জেএস কোড ব্যবহার করে স্ট্রিং উত্পাদন করতে পারেন। আপনি স্ট্রিংটিকে আক্ষরিক হিসাবে নির্দিষ্ট করতে পারেন (যদিও এই ক্ষেত্রে ডট স্বীকৃতি আরও সহজভাবে পড়তে পারে) বা কোনও পরিবর্তনশীল ব্যবহার বা কোনও উপায়ে গণনা করতে পারেন।

সুতরাং, এই সব সেট myObj সম্পত্তি নামে prop1 মান হ্যালো :

// quick easy-on-the-eye dot notation
myObj.prop1 = "Hello";

// brackets+literal
myObj["prop1"] = "Hello";

// using a variable
var x = "prop1"; 
myObj[x] = "Hello";                     

// calculate the accessor string in some weird way
var numList = [0,1,2];
myObj[ "prop" + numList[1] ] = "Hello";     

pitfalls:

myObj.[xxxx] = "Hello";      // wrong: mixed notations, syntax fail
myObj[prop1] = "Hello";      // wrong: this expects a variable called prop1

tl; dnr : আপনি কীটি গণনা বা রেফারেন্স করতে চাইলে আপনাকে অবশ্যই বন্ধনী স্বরলিপি ব্যবহার করতে হবে । আপনি যদি কীটি স্পষ্টভাবে ব্যবহার করছেন তবে সাধারণ স্পষ্ট কোডের জন্য ডট স্বরলিপি ব্যবহার করুন।

দ্রষ্টব্য: আরও কিছু ভাল এবং সঠিক উত্তর রয়েছে তবে আমি ব্যক্তিগতভাবে সেগুলি জেএস-অন-দ্য ফ্লাইটের স্পর্শকাতরতার সাথে স্বল্প পরিচিত হয়ে এসেছি। এটি কিছু লোকের পক্ষে কার্যকর হতে পারে।


3

লোডাশের সাহায্যে আপনি এই ধরনের নতুন অবজেক্ট তৈরি করতে পারেন _ সেট :

obj = _.set({}, key, val);

বা আপনি বিদ্যমান বস্তুতে এটি সেট করতে পারেন:

var existingObj = { a: 1 };
_.set(existingObj, 'a', 5); // existingObj will be: { a: 5 }

আপনি যদি আপনার পথে বিন্দু ("।") ব্যবহার করতে চান তবে আপনার যত্ন নেওয়া উচিত, কারণ লোডাশ হায়ারার্কি সেট করতে পারে, উদাহরণস্বরূপ:

_.set({}, "a.b.c", "d"); // { "a": { "b": { "c": "d" } } }

2

প্রথমে আমাদের কীটি পরিবর্তনশীল হিসাবে সংজ্ঞায়িত করতে হবে এবং তারপরে আমাদেরকে কী হিসাবে অবজেক্ট হিসাবে নির্ধারণ করতে হবে। উদাহরণস্বরূপ

var data = {key:'dynamic_key',value:'dynamic_value'}
var key = data.key;
var obj = { [key]: data.value}
console.log(obj)



0

আপনি যদি কোনও বস্তুতে গতিশীলভাবে ক্ষেত্রগুলি যুক্ত করতে চান তবে তা করার সহজ উপায়টি নিম্নরূপ:

 var params= [
{key: "k1", value=1},
{key: "k2", value=2},
{key: "k3", value=3}];

for(i=0; i< params.len; i++) {
  data[params[i].key] = params[i].value
}

এটি নিম্নলিখিত ক্ষেত্রগুলি সহ ডেটা অবজেক্ট তৈরি করবে:

{k1:1, k2:2, k3:3}

0

আপনার যদি অবজেক্ট থাকে তবে আপনি ম্যাপের চেয়ে কীগুলির অ্যারে তৈরি করতে পারবেন এবং পূর্ববর্তী অবজেক্ট কী এবং মানগুলি থেকে নতুন অবজেক্ট তৈরি করতে পারবেন।

Object.keys(myObject)
.map(el =>{
 const obj = {};
 obj[el]=myObject[el].code;
 console.log(obj);
});

0

জাভাস্ক্রিপ্ট অবজেক্ট বৈশিষ্ট্য আনার জন্য আজভাস্ক্রিপ্টের দুটি ধরণের টিকা আছে:

ওবজ = {};

1) (।) টীকা যেমন। Obj.id এটি কেবল তখনই কাজ করবে যদি বস্তুর কাছে ইতিমধ্যে 'id' নামের একটি সম্পত্তি থাকে

2) ([]) টীকা যেমন। ওবজ [আইডি] এখানে যদি আইডিটির নামের সাথে আইডিটির কোনও সম্পত্তি না থাকে, তবে এটি 'আইডি' নামে একটি নতুন সম্পত্তি তৈরি করবে।

উদাহরণস্বরূপ:

আপনি ওবজ [নাম] লিখলে সর্বদা একটি নতুন সম্পত্তি তৈরি করা হবে। এবং সম্পত্তিটি একই নামে ইতিমধ্যে উপস্থিত থাকলে এটি এটিকে ওভাররাইড করে।

const obj = {}
    jQuery(itemsFromDom).each(function() {
      const element = jQuery(this)
      const name = element.attr('id')
      const value = element.attr('value')
      // This will work
      obj[name]= value;
    })

0

বিষয় সম্পর্কিত, বিশেষত jquery জন্য নয়। আমি এটি E6 প্রতিক্রিয়া প্রকল্পগুলিতে ব্যবহার করেছি, সম্ভবত কাউকে সহায়তা করে:

this.setState({ [`${name}`]: value}, () => {
      console.log("State updated: ", JSON.stringify(this.state[name]));
    });

পিএস: দয়া করে উদ্ধৃতি চরিত্রটি মনে রাখবেন।



-2
const data = [{
    name: 'BMW',
    value: '25641'
  }, {
    name: 'Apple',
    value: '45876'
  },
  {
    name: 'Benz',
    value: '65784'
  },
  {
    name: 'Toyota',
    value: '254'
  }
]

const obj = {
  carsList: [{
    name: 'Ford',
    value: '47563'
  }, {
    name: 'Toyota',
    value: '254'
  }],
  pastriesList: [],
  fruitsList: [{
    name: 'Apple',
    value: '45876'
  }, {
    name: 'Pineapple',
    value: '84523'
  }]
}

let keys = Object.keys(obj);

result = {};

for(key of keys){
    let a =  [...data,...obj[key]];
    result[key] = a;

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