javascript - tutorial - w3schools




জাভাস্ক্রিপ্ট বস্তুর গতিশীলভাবে নামযুক্ত বৈশিষ্ট্য যোগ করা সম্ভব? (10)

আপনি নীচের বিকল্পগুলির কিছু ব্যবহার করে গতিশীলভাবে বৈশিষ্ট্য যুক্ত করতে পারেন:

আপনার উদাহরণে:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};

আপনি পরবর্তী ধাপে একটি গতিশীল মান দিয়ে একটি সম্পত্তি সংজ্ঞায়িত করতে পারেন:

data.key = value;

অথবা

data['key'] = value;

এমনকি আরও অনেক কিছু .. যদি আপনার কী গতিশীল হয় তবে আপনি অবজেক্ট ক্লাস ব্যবহার করে সংজ্ঞায়িত করতে পারেন:

Object.defineProperty(data, key, withValue(value));

যেখানে তথ্য আপনার বস্তু, মূলটি হল কী নাম সংরক্ষণ করতে পরিবর্তনশীল এবং মানটি ভেরিয়েবল মান সংরক্ষণ করতে হয়।

আশা করি এটা কাজে লাগবে!

জাভাস্ক্রিপ্টে, আমি এমন একটি বস্তু তৈরি করেছি যাতে:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};

সম্পত্তির নাম রান সময় পর্যন্ত নির্ধারিত না হলে প্রাথমিক গঠনের পরে এই বস্তুর আরও বৈশিষ্ট্য যোগ করা কি সম্ভব? অর্থাত

var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to 
//my object?

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

উদাহরণস্বরূপ, আসুন আমরা বলি যে বস্তুর ভিতরে থাকা ব্যক্তি নামক একটি অ্যারে আছে:

 let Person = [{id:1, Name: "John"}, {id:2, Name: "Susan"}, {id:3, Name: "Jet"}]

সুতরাং, আপনি সংশ্লিষ্ট মান সঙ্গে একটি সম্পত্তি যোগ করতে পারেন। চলুন আমরা একটি ভাষা ডিফল্ট মান দিয়ে যুক্ত করতে চাই।

Person.map((obj)=>({...obj,['Language']:"EN"}))

ব্যক্তি অ্যারে এখন এই মত হয়ে যাবে:

Person = [{id:1, Name: "John", Language:"EN"}, 
{id:2, Name: "Susan", Language:"EN"}, {id:3, Name: "Jet", Language:"EN"}]

এখানে আমি সমস্যা সমাধান কিভাবে।

var obj = {

};
var field = "someouter.someinner.someValue";
var value = 123;

function _addField( obj, field, value )
{
    // split the field into tokens
    var tokens = field.split( '.' );

    // if there's more than one token, this field is an object
    if( tokens.length > 1 )
    {
        var subObj = tokens[0];

        // define the object
        if( obj[ subObj ] !== undefined ) obj[ subObj ] = {};

        // call addfield again on the embedded object
        var firstDot = field.indexOf( '.' );
        _addField( obj[ subObj ], field.substr( firstDot + 1 ), value );

    }
    else
    {
        // no embedded objects, just field assignment
        obj[ field ] = value;
    }
}

_addField( obj, field, value );
_addField(obj, 'simpleString', 'string');

console.log( JSON.stringify( obj, null, 2 ) );

নিম্নলিখিত বস্তু তৈরি করে:

{
  "someouter": {
    "someinner": {
      "someValue": 123
    }
  },
  "simpleString": "string"
}

এখানে, আপনার নোট ব্যবহার করে:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to 
//my object?
data[propName] = 'Some New Property value'

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

var data = {
    var1:'somevalue'
}
data.newAttribute = 'newvalue'

বা :

data[newattribute] = somevalue

গতিশীল কী জন্য।


পূর্ববর্তী উত্তরগুলি ছাড়াও, এবং যদি আপনি ভাবছেন যে কিভাবে আমরা কম্পিউটেড প্রপার্টি নামগুলি (ECMAScript 6) ব্যবহার করে ভবিষ্যতে গতিশীল সম্পত্তি নাম লিখতে যাচ্ছি, এখানে কীভাবে:

var person = "John Doe";
var personId = "person_" + new Date().getTime();
var personIndex = {
    [ personId ]: person
//  ^ computed property name
};

personIndex[ personId ]; // "John Doe"

রেফারেন্স: ECMAScript 6 বোঝা - নিকোলাস জাকাস


ব্যবহার করে বিদ্যমান বস্তুর একটি সম্পত্তি যোগ করার সময় সতর্ক থাকুন । (বিন্দু) পদ্ধতি।

(.dot) বস্তুটিতে একটি সম্পত্তি যুক্ত করার পদ্ধতিটি কেবল তখনই ব্যবহার করা উচিত যদি আপনি 'কী' আগেই জানেন তবে অন্যথায় [বন্ধনী] পদ্ধতিটি ব্যবহার করুন।

উদাহরণ:

   var data = {
        'Property1': 1
    };
    
    // Two methods of adding a new property [ key (Property4), value (4) ] to the
    // existing object (data)
    data['Property2'] = 2; // bracket method
    data.Property3 = 3;    // dot method
    console.log(data);     // { Property1: 1, Property2: 2, Property3: 3 }
    
    // But if 'key' of a property is unknown and will be found / calculated
    // dynamically then use only [bracket] method not a dot method    
    var key;
    for(var i = 4; i < 6; ++i) {
    	key = 'Property' + i;     // Key - dynamically calculated
    	data[key] = i; // CORRECT !!!!
    }
    console.log(data); 
    // { Property1: 1, Property2: 2, Property3: 3, Property4: 4, Property5: 5 }
    
    for(var i = 6; i < 2000; ++i) {
    	key = 'Property' + i; // Key - dynamically calculated
    	data.key = i;         // WRONG !!!!!
    }
    console.log(data); 
    // { Property1: 1, Property2: 2, Property3: 3, 
    //   Property4: 4, Property5: 5, key: 1999 }

কনসোল লগের শেষে সমস্যাটি লক্ষ্য করুন- সম্পত্তি 6: 6, সম্পত্তি 7: 7, ........., সম্পত্তি 1999: 1999 এর পরিবর্তে 'কী: 1999' । তাই গতিশীলভাবে তৈরি সম্পত্তি যোগ করার সেরা উপায় [বন্ধনী] পদ্ধতি।


শুধু উপরের abeing এর উত্তর একটি সংযোজন। আপনি নিচে বর্ণিত defineProperty জটিলতা জটিল encapsulate একটি ফাংশন সংজ্ঞায়িত করতে পারেন।

var defineProp = function ( obj, key, value ){
  var config = {
    value: value,
    writable: true,
    enumerable: true,
    configurable: true
  };
  Object.defineProperty( obj, key, config );
};

//Call the method to add properties to any object
defineProp( data, "PropertyA",  1 );
defineProp( data, "PropertyB",  2 );
defineProp( data, "PropertyC",  3 );

রেফারেন্স: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript


স্পষ্টভাবে. একটি অভিধান বা সহযোগী অ্যারে হিসাবে এটি চিন্তা করুন। আপনি যে কোনও সময়ে এটি যোগ করতে পারেন।


হ্যা এটা সম্ভব. ধরে নেওয়া যাক:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};
var propertyName = "someProperty";
var propertyValue = "someValue";

উভয় ক্ষেত্রেই:

data[propertyName] = propertyValue;

অথবা

eval("data." + propertyName + " = '" + propertyValue + "'");

প্রথম পদ্ধতি পছন্দসই। eval () ব্যবহারকারীর সরবরাহকৃত মানগুলি ব্যবহার করে যদি আপনি নিরাপদ নিরাপত্তা উদ্বেগগুলি ব্যবহার করেন তবে আপনি যদি এটি এড়াতে পারেন তবে এটি ব্যবহার করবেন না তবে এটি বিদ্যমান এবং এটি কী করতে পারে তা জানার যোগ্য।

আপনি এই সাথে রেফারেন্স করতে পারেন:

alert(data.someProperty);

অথবা

data(data["someProperty"]);

অথবা

alert(data[propertyName]);





javascript