কীভাবে জাভাস্ক্রিপ্ট অবজেক্টের মানগুলি গতিশীলভাবে সেট করবেন?


100

কথায় কথায় কেসটি ব্যাখ্যা করা কঠিন, আমাকে একটি উদাহরণ দেওয়া যাক:

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 ;)

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



4
ঘনিষ্ঠভাবে তাকান। দেখে মনে হচ্ছে আপনি কেবল আদালতের কোড সামঞ্জস্য করতে ভুলে গেছেন। এটা হওয়া উচিত myObj[prop] = value;eval('myObj.'+name)ভেরিয়েবলের nameঅস্তিত্ব না থাকায় এটি কাজ করে না।
ফেলিক্স ক্লিং

7
varভেরিয়েবল ঘোষণার জন্য আপনার আরও কিবোর্ড ব্যবহার করা উচিত , আরও সেমিকোলন ব্যবহার করা উচিত, evalআরও উত্তর ব্যবহার এবং গ্রহণ করা উচিত নয় । সম্পন্ন.
jAndy

আপনার প্রশ্নটি ত্রুটিযুক্ত - এটি কাজ করে তবে আপনি একটি ভুল করেছেন। আপনি " myObj[name]" লিখেছিলেন যখন আমি নিশ্চিত যে আপনি লিখতে চেয়েছিলেন " myObj[prop]"।
আর্নেস্ট ফ্রাইডম্যান-পার্বত্য

উত্তর:


153
myObj[prop] = value;

এটা কাজ করা উচিত। আপনি ভেরিয়েবলের নাম এবং এর মান মিশ্রিত করেছেন। তবে স্ট্রিংয়ের সাথে কোনও বস্তুটির বৈশিষ্ট্যগুলি পেতে ইনডেক্স করা জাভাস্ক্রিপ্টে সূক্ষ্মভাবে কাজ করে।


49
myObj.name=value

বা

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

এই দুটিই বিনিময়যোগ্য।

সম্পাদনা: আমি অনুমান করছি যে আপনি আমার myObj[prop] = valueওবজ [নাম] = মানের পরিবর্তে বোঝাতে চাইছেন। দ্বিতীয় বাক্য গঠন সঠিকভাবে কাজ করে: http://jsfiddle.net/waitinforatrain/dNjvb/1/


4
যদি বস্তুর সম্পত্তিটি একটি সংরক্ষিত শব্দ হয় তবে দ্বিতীয় বাক্য গঠনটি প্রয়োজন is
timw4mail

যদিও এটি সঠিক, এটি সত্যই তার প্রশ্নের উত্তর দেয় না; সম্পত্তির নাম যখন ভেরিয়েবলের হয় তখন তিনি কী করবেন তা ভাবছেন।
আর্নেস্ট ফ্রেডম্যান-হিল

সেখানে আপডেট হওয়া উত্তর, আপনার nameযেখানে থাকা উচিতprop
বেকফ্লান

5

সম্পত্তি সেট করার সাথে সাথে আপনি একইভাবে পেতে পারেন।

foo = {
 bar: "value"
}

আপনি মান সেট করুন foo["bar"] = "baz";

মান পেতে foo["bar"]

"বাজ" ফিরবে


5

আপনি এমন কোনও কিছু তৈরি করতে পারেন যা কোনও মান বস্তুর (vo) অনুরূপ হতে পারে;

সামমোডেলক্লাসনেম ভিও.জেএস;

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, এটি আপনার প্রত্যাশা করা কীটি অ্যাক্সেস করতে সক্ষম হবে না।


4
এর মধ্যে myObj[name]এবং এখনও পার্থক্য রয়েছে myObj.nameকারণ পূর্বেরটি একটি পরিবর্তনশীল নাম এবং দ্বিতীয়টি একটি আক্ষরিক কীকে বোঝায়।
pimvdb

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