এখানে আমার বস্তুটি আক্ষরিক:
var obj = {key1: value1, key2: value2};
আমি কীভাবে বস্তুর key3
সাথে ক্ষেত্র যুক্ত করতে পারি value3
?
এখানে আমার বস্তুটি আক্ষরিক:
var obj = {key1: value1, key2: value2};
আমি কীভাবে বস্তুর key3
সাথে ক্ষেত্র যুক্ত করতে পারি value3
?
উত্তর:
কোনও সামগ্রীতে নতুন বৈশিষ্ট্য যুক্ত করার দুটি উপায় রয়েছে :
var obj = {
key1: value1,
key2: value2
};
obj.key3 = "value3";
obj["key3"] = "value3";
সম্পত্তির নাম জানলেই প্রথম ফর্মটি ব্যবহার করা হয়। দ্বিতীয় নামটি ব্যবহৃত হয় যখন সম্পত্তিটির নামটি গতিশীলভাবে নির্ধারিত হয়। এই উদাহরণে পছন্দ করুন:
var getProperty = function (propertyName) {
return obj[propertyName];
};
getProperty("key1");
getProperty("key2");
getProperty("key3");
একটি বাস্তব জাভাস্ক্রিপ্ট অ্যারে ব্যবহার করে নির্মিত যেতে পারে:
var arr = [];
var arr = new Array();
Object.keys({"b": 1, "c": 3, "a": 2}).sort().forEach(console.log);
length
সম্পত্তি সেট করা হয়নি কারণ এটি কোনও অ্যারে নয়, এটি একটি অবজেক্ট / মানচিত্র / অভিধান।
Object.assign()
অবজেক্ট.অ্যাসাইন (ডেস্ট, এসআরসি 1, এসসিআর 2, ...) অবজেক্টগুলিকে মার্জ করে।
এটি dest
উত্স অবজেক্টের বৈশিষ্ট্য এবং মানগুলির সাথে ওভাররাইট করে, তারপরে ফিরে আসে dest
।
Object.assign()
পদ্ধতি একটি লক্ষ্য বস্তু এক বা একাধিক উৎস বস্তু থেকে সব গণনীয় নিজের বৈশিষ্ট্য মান কপি করতে ব্যবহৃত হয়। এটি লক্ষ্য বস্তুটি ফিরিয়ে দেবে।
var obj = {key1: "value1", key2: "value2"};
Object.assign(obj, {key3: "value3"});
document.body.innerHTML = JSON.stringify(obj);
{...}
obj = {...obj, ...pair};
এমডিএন থেকে :
এটি সরবরাহ করা অবজেক্ট থেকে একটি নতুন অবজেক্টের উপরের অগণিত বৈশিষ্ট্যগুলি অনুলিপি করে।
শ্যালো-ক্লোনিং (প্রোটোটাইপ বাদে) বা অবজেক্টগুলির মার্জ করা এখন এর চেয়ে কম সংক্ষিপ্ত বাক্য গঠন ব্যবহার করে সম্ভব
Object.assign()
।নোট করুন যে সেটারগুলিকে
Object.assign()
ট্রিগার করে যেখানে স্প্রেড সিনট্যাক্স হয় না।
এটি বর্তমান ক্রোম এবং বর্তমান ফায়ারফক্সে কাজ করে। তারা বলে যে এটি বর্তমান এজ তে কাজ করে না।
var obj = {key1: "value1", key2: "value2"};
var pair = {key3: "value3"};
obj = {...obj, ...pair};
document.body.innerHTML = JSON.stringify(obj);
অবজেক্ট অ্যাসাইনমেন্ট অপারেটর +=
:
obj += {key3: "value3"};
উফ ... আমি বহন করলাম ভবিষ্যতে তথ্য পাচার অবৈধ। যথাযথভাবে অস্পষ্ট!
const
এবং এর let
পরিবর্তে var
2018 এর উপায় হওয়া উচিত?
const
কারণ এটি সেই সুবিধাটি সরিয়ে দেয়। যতবার আমি এটি ব্যবহার করেছি, এটি বিকাশে বাধা পেয়েছে।
Year 2019 answer ... Opps ...
অংশটি আপনাকে ধন্যবাদ দেওয়ার দাবিদার , আপনি আমার দিনটি তৈরি করেছেন । সেরা উত্তর +1
আমি অনুরাগী সাবালক হয়েছে LoDash / আন্ডারস্কোর যখন বড় প্রকল্পের লেখা।
যুক্ত করে obj['key']
বা obj.key
সমস্ত শক্ত খাঁটি জাভাস্ক্রিপ্ট উত্তর রয়েছে। তবে লোড্যাশ এবং অ্যান্ডস্কোর উভয় গ্রন্থাগারই সাধারণভাবে অবজেক্টস এবং অ্যারেগুলির সাথে কাজ করার সময় অনেকগুলি অতিরিক্ত সুবিধাজনক ফাংশন সরবরাহ করে।
.push()
অ্যারেগুলির জন্য, বস্তুর জন্য নয় ।
আপনি যা সন্ধান করছেন তার উপর নির্ভর করে দুটি সুনির্দিষ্ট ফাংশন রয়েছে যা ব্যবহারের অনুভূতির সাথে একইভাবে কার্যকারিতা দিতে ও সুন্দর লাগতে পারে arr.push()
। আরও তথ্যের জন্য ডক্স পরীক্ষা করুন, তাদের কয়েকটি দুর্দান্ত উদাহরণ রয়েছে।
দ্বিতীয় অবজেক্টটি ওভাররাইট বা বেস অবজেক্টে যুক্ত হবে।
undefined
মানগুলি অনুলিপি করা হয় না।
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.merge(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}
দ্বিতীয় অবজেক্টটি ওভাররাইট বা বেস অবজেক্টে যুক্ত হবে।
undefined
অনুলিপি করা হবে।
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}
দ্বিতীয় অবজেক্টে ডিফল্ট রয়েছে যা যদি বিদ্যমান না থাকে তবে বেস অবজেক্টে যুক্ত করা হবে।
undefined
কীগুলি ইতিমধ্যে উপস্থিত থাকলে মানগুলি অনুলিপি করা হবে।
var obj = {key3: "value3", key5: "value5"};
var obj2 = {key1: "value1", key2:"value2", key3: "valueDefault", key4: "valueDefault", key5: undefined};
_.defaults(obj, obj2);
console.log(obj);
// → {key3: "value3", key5: "value5", key1: "value1", key2: "value2", key4: "valueDefault"}
তদতিরিক্ত, এটি jQuery.extend উল্লেখ করার উপযুক্ত হতে পারে, এটি _ ডাবের মতোই কাজ করে এবং আপনি যদি ইতিমধ্যে jQuery ব্যবহার করেন তবে এটি একটি ভাল বিকল্প হতে পারে।
দ্বিতীয় অবজেক্টটি ওভাররাইট বা বেস অবজেক্টে যুক্ত হবে।
undefined
মানগুলি অনুলিপি করা হয় না।
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
$.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}
এটা তোলে ES6 / ES2015 Object.assign কহতব্য, এটা _.merge অনুরূপ কার্যকারিতা ও সবচেয়ে ভাল বিকল্প হতে পারে যদি আপনি ইতিমধ্যে একটি ES6 / ES2015 polyfill মত ব্যবহার করছেন হতে পারে হট্টগোল যদি আপনি চান নিজেকে polyfill ।
দ্বিতীয় অবজেক্টটি ওভাররাইট বা বেস অবজেক্টে যুক্ত হবে।
undefined
অনুলিপি করা হবে।
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
Object.assign(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}
_.extend
আন্ডারস্কোর লাইব্রেরি এখনও ব্যবহার করছে extend
না বলে এটি একটি আরও সার্বজনীন উপন্যাস merge
। আমি আমার উত্তর আপডেট করব।
আপনি এগুলির মধ্যে যে কোনওটি ব্যবহার করতে পারেন (প্রদত্ত কী 3 টি আপনি ব্যবহার করতে চান এমন একিউটাল কী)
arr[ 'key3' ] = value3;
অথবা
arr.key3 = value3;
কী 3 যদি ভেরিয়েবল হয় তবে আপনার করা উচিত:
var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;
এর পরে, অনুরোধ করা একটি আক্ষরিকের arr.a_key
মানটি ফিরিয়ে দেয় ।value3
3
arr.key3 = value3;
কারণ আপনার আরারটি আসলে কোনও অ্যারে নয় ... এটি একটি প্রোটোটাইপ অবজেক্ট। আসল অ্যারেটি হ'ল:
var arr = [{key1: value1}, {key2: value2}];
তবে এটি এখনও ঠিক নয়। এটি আসলে হওয়া উচিত:
var arr = [{key: key1, value: value1}, {key: key2, value: value2}];
এবং আমরা prop2 : 2
এই বস্তুকে যুক্ত করতে চাই , এগুলি সর্বাধিক সুবিধাজনক বিকল্প:
object.prop2 = 2;
object['prop2'] = 2;
তাহলে আমরা কোনটি ব্যবহার করব?
ডট অপারেটর আরও পরিষ্কার সিনট্যাক্স এবং এটি একটি ডিফল্ট (imo) হিসাবে ব্যবহার করা উচিত। যাইহোক, ডট অপারেটর কোনও জিনিসে গতিশীল কী যুক্ত করতে সক্ষম নয়, যা কিছু ক্ষেত্রে খুব কার্যকর হতে পারে। এখানে একটি উদাহরণ:
const obj = {
prop1: 1
}
const key = Math.random() > 0.5 ? 'key1' : 'key2';
obj[key] = 'this value has a dynamic key';
console.log(obj);
যখন আমরা 2 টি অবজেক্টের বৈশিষ্ট্যগুলি মার্জ করতে চাই তখন এগুলি সবচেয়ে সুবিধাজনক বিকল্প:
Object.assign()
, আর্গুমেন্ট হিসাবে একটি লক্ষ্য বস্তু এবং এক বা একাধিক উত্স অবজেক্ট গ্রহণ করে এবং সেগুলি একত্রিত করবে। উদাহরণ স্বরূপ:const object1 = {
a: 1,
b: 2,
};
const object2 = Object.assign({
c: 3,
d: 4
}, object1);
console.log(object2);
...
const obj = {
prop1: 1,
prop2: 2
}
const newObj = {
...obj,
prop3: 3,
prop4: 4
}
console.log(newObj);
আমরা কোনটি ব্যবহার করব?
Object.assign()
আরও গতিশীল কারণ কারণ আমাদের কাছে সমস্ত বস্তুর অ্যাক্সেস রয়েছে যা আর্গুমেন্ট হিসাবে উত্তীর্ণ হয়েছে এবং সেগুলি নতুন অবজেক্টে অর্পণ করার আগে এগুলি পরিচালনা করতে পারে।আমি জানি যে এর জন্য ইতিমধ্যে একটি স্বীকৃত উত্তর আছে তবে আমি ভেবেছিলাম যে আমি আমার ধারণাটি কোথাও নথিভুক্ত করব। দয়া করে [লোকেরা] এই ধারণার মধ্যে গর্তগুলি নির্বিঘ্নে বোধ করতে পারেন, কারণ এটিই সেরা সমাধান কিনা তা আমি নিশ্চিত নই ... তবে কয়েক মিনিট আগে আমি এটিকে একসাথে রেখেছি:
Object.prototype.push = function( key, value ){
this[ key ] = value;
return this;
}
আপনি এটি এইভাবে ব্যবহার করবেন:
var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );
যেহেতু, প্রোটোটাইপ ফাংশনটি ফিরে আসছে this
আপনি .push
আপনার obj
ভেরিয়েবলের শেষে চেইন চালিয়ে যেতে পারেন :obj.push(...).push(...).push(...);
আর একটি বৈশিষ্ট্য হ'ল আপনি ধাক্কা ফাংশন আর্গুমেন্টের মান হিসাবে একটি অ্যারে বা অন্য কোনও বস্তু পাস করতে পারেন। একটি কার্যনির্বাহী উদাহরণের জন্য আমার ফিডলটি দেখুন: http://jsfiddle.net/7tEme/
TypeError: 'undefined' is not a function (evaluating 'U[a].exec(s)')
যা অদ্ভুত কারণ এটি j jfery1.9 এর সাথেও jsfiddle এ কাজ করে
আজ 2020.01.14 আমি নির্বাচিত সমাধানগুলির জন্য ক্রোম ভি 78.0.0, সাফারি ভি 13.0.4 এবং ফায়ারফক্স ভি 71.0.0-এ ম্যাকওস হাইসিয়ার 10.13.6 এ পরীক্ষা করে নিই। আমি সমাধানগুলিকে পরিবর্তনীয় (প্রথম অক্ষর এম) এবং পরিবর্তনযোগ্য (প্রথম অক্ষর I )গুলিতে ভাগ করি। আমি এই প্রশ্নটির উত্তরে এখনও প্রকাশিত হয়নি এমন কয়েকটি স্থাবর সমাধান (আইবি, আইসি, আইডি / আইই) সরবরাহ করি
উপসংহার
obj.key3 = "abc"
(এমএ, এমবি) এর মতো ক্লাসিক পরিবর্তনীয় পদ্ধতির দ্রুততম{...obj, key3:'abc'}
এবং Object.assign
(আইএ, আইবি) দ্রুততমনীচে স্নিপেটে পরীক্ষিত সমাধানের পূর্বনির্ধারিত সমাধান রয়েছে, আপনি এখানে নিজের মেশিনে পরীক্ষা করতে পারেন
আপনি @ আয়নু জি স্ট্যান এর উত্তর দিয়ে একটি শ্রেণি তৈরি করতে পারেন
function obj(){
obj=new Object();
this.add=function(key,value){
obj[""+key+""]=value;
}
this.obj=obj
}
শেষ শ্রেণীর সাথে একটি নতুন অবজেক্ট তৈরি করা:
my_obj=new obj();
my_obj.add('key1', 'value1');
my_obj.add('key2', 'value2');
my_obj.add('key3','value3');
অবজেক্টটি মুদ্রণ করা হচ্ছে
console.log(my_obj.obj) // Return {key1: "value1", key2: "value2", key3: "value3"}
একটি কী মুদ্রণ করা হচ্ছে
console.log(my_obj.obj["key3"]) //Return value3
আমি জাভাস্ক্রিপ্টে নবাগত, মন্তব্য স্বাগত। আমার জন্য কাজ কর.
ইতিমধ্যে বেশিরভাগ উত্তরে ইতিমধ্যে উল্লিখিত দুটি সর্বাধিক ব্যবহৃত উপায়
obj.key3 = "value3";
obj["key3"] = "value3";
কোনও সম্পত্তি সংজ্ঞায়িত করার আরও একটি উপায় অবজেক্ট.ডেফাইনপ্রোপার্টি () ব্যবহার করে
Object.defineProperty(obj, 'key3', {
value: "value3", // undefined by default
enumerable: true, // false by default
configurable: true, // false by default
writable: true // false by default
});
সম্পত্তি সংজ্ঞা দেওয়ার সময় আপনি আরও নিয়ন্ত্রণ রাখতে চাইলে এই পদ্ধতিটি কার্যকর। সংজ্ঞায়িত সম্পত্তিটি ব্যবহার্য হিসাবে গণ্যযোগ্য, কনফিগারযোগ্য এবং লিখনযোগ্য হিসাবে সেট করা যেতে পারে।
বেশিরভাগ ব্রাউজার দ্বারা সমর্থিত, এবং এটি পরীক্ষা করে যে অবজেক্ট কীটি পাওয়া যায় বা আপনি যোগ করতে চান না, যদি পাওয়া যায় তবে এটি বিদ্যমান কী মানকে ছাড়িয়ে যায় এবং এটি উপলব্ধ না মান সহ কী যুক্ত করে
উদাহরণ 1
let my_object = {};
// now i want to add something in it
my_object.red = "this is red color";
// { red : "this is red color"}
উদাহরণ 2
let my_object = { inside_object : { car : "maruti" }}
// now i want to add something inside object of my object
my_object.inside_object.plane = "JetKing";
// { inside_object : { car : "maruti" , plane : "JetKing"} }
উদাহরণ 3
let my_object = { inside_object : { name : "abhishek" }}
// now i want to add something inside object with new keys birth , gender
my_object.inside_object.birth = "8 Aug";
my_object.inside_object.gender = "Male";
// { inside_object :
// { name : "abhishek",
// birth : "8 Aug",
// gender : "Male"
// }
// }
যদি কোনও অবজেক্টের ভিতরে আপনার একাধিক বেনামে অবজেক্ট ল্যাটারাল থাকে এবং কী / মান জোড়া যুক্ত অন্য কোনও অবজেক্ট যুক্ত করতে চান তবে এটি করুন:
ফায়ারব্যাগ 'অবজেক্ট:
console.log(Comicbook);
আয়:
[অবজেক্ট {নাম = "স্পাইডারম্যান", মান = "11"}, অবজেক্ট {নাম = "মার্শিপুলামি", মান = "18"}, অবজেক্টের নাম = "গারফিল্ড", মান = "2"}]
কোড:
if (typeof Comicbook[3]=='undefined') {
private_formArray[3] = new Object();
private_formArray[3]["name"] = "Peanuts";
private_formArray[3]["value"] = "12";
}
যোগ হবে Object {name="Peanuts", value="12"}
Comicbook বস্তু
হয় obj['key3'] = value3
বা obj.key3 = value3
নতুন জুটি যোগ করুনobj
।
তবে, আমি জানি jQuery উল্লেখ করা হয়নি, তবে আপনি যদি এটি ব্যবহার করে থাকেন তবে আপনি এটির মাধ্যমে অবজেক্টটি যুক্ত করতে পারেন $.extend(obj,{key3: 'value3'})
। উদাহরণ:
var obj = {key1: 'value1', key2: 'value2'};
$('#ini').append(JSON.stringify(obj));
$.extend(obj,{key3: 'value3'});
$('#ext').append(JSON.stringify(obj));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ini">Initial: </p>
<p id="ext">Extended: </p>
jQuery এর। প্রসারিত (লক্ষ্য [, অবজেক্ট 1] [, অবজেক্টএন]) দুই বা ততোধিক অবজেক্টের বিষয়বস্তুকে একসাথে প্রথম অবজেক্টে একত্রিত করে।
এবং এটি এর সাথে পুনরাবৃত্ত সংযোজন / পরিবর্তনগুলিও মঞ্জুরি দেয় $.extend(true,object1,object2);
:
পরবর্তী জাভাস্ক্রিপ্ট স্পেসিফিকেশন (প্রার্থী পর্যায়ে 3) এর একটি সংক্ষিপ্ত এবং মার্জিত উপায় হ'ল:
obj = { ... obj, ... { key3 : value3 } }
অবজেক্ট স্প্রেড বনাম অবজেক্ট.অ্যাসাইন এবং ডাঃ অ্যাক্সেল রাউশমায়ার্স সাইটে আরও গভীর আলোচনা পাওয়া যাবে ।
এটি 8.3.0 প্রকাশের পর থেকে নোড.জেজে ইতিমধ্যে কাজ করে।
আধুনিক সংস্করণে ভিভালদি, ক্রোম, অপেরা এবং ফায়ারফক্স এই বৈশিষ্ট্যটিও জানে, তবে মিরোসোফ্ট আজ অবধি না, ইন্টারনেট এক্সপ্লোরার বা এজে নেই।
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
var injectObj = {isActive:true, timestamp:new Date()};
// function to inject key values in all object of json array
function injectKeyValueInArray (array, keyValues){
return new Promise((resolve, reject) => {
if (!array.length)
return resolve(array);
array.forEach((object) => {
for (let key in keyValues) {
object[key] = keyValues[key]
}
});
resolve(array);
})
};
//call function to inject json key value in all array object
injectKeyValueInArray(arrOfObj,injectObj).then((newArrOfObj)=>{
console.log(newArrOfObj);
});
এর মতো আউটপুট: -
[ { name: 'eve',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'john',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'jane',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z } ]
ইসিএমএ -২2২ ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf) এ সংজ্ঞায়িত সম্পত্তি অ্যাক্সেসর অনুসারে , P67), দুটি উপায়ে আপনি করতে বৈশিষ্ট্য যোগ করার জন্য কি করতে পারেন একটি বিদ্যমান অবজেক্ট এই দুটি উপায়, জাভাস্ক্রিপ্ট ইঞ্জিন তাদের একই আচরণ করবে।
প্রথম উপায় হ'ল বিন্দু চিহ্নিতকরণ ব্যবহার:
obj.key3 = value3;
তবে এইভাবে, আপনার একটি পরিচয়কারক নাম ব্যবহার করা উচিত বিন্দু স্বরলিপি দেওয়ার পরে ।
দ্বিতীয় উপায়টি হ'ল বন্ধনী স্বরলিপি ব্যবহার করা:
obj["key3"] = value3;
এবং অন্য ফর্ম:
var key3 = "key3";
obj[key3] = value3;
এইভাবে, আপনি বন্ধনী স্বরলিখনে একটি এক্সপ্রেশন ( আইডেন্টিফায়ার নাম অন্তর্ভুক্ত ) ব্যবহার করতে পারেন ।
আমরাও এইভাবে এটি করতে পারি।
var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
for (var [key, value] of myMap) {
console.log(key + ' = ' + value);
}
যেহেতু এটি অতীতের একটি প্রশ্ন তবে বর্তমান সমস্যা। আরও একটি সমাধান পরামর্শ দিতে পারে: কেবল কী এবং মানগুলি ফাংশনে পাস করুন এবং আপনি একটি মানচিত্রের অবজেক্ট পাবেন।
var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}
{[key]: value}
সিনট্যাক্স ব্যবহার করে আপনি একটি নতুন অবজেক্ট তৈরি করতে পারেন :
const foo = {
a: 'key',
b: 'value'
}
const bar = {
[foo.a]: foo.b
}
console.log(bar); // {key: 'value'}
console.log(bar.key); // value
const baz = {
['key2']: 'value2'
}
console.log(baz); // {key2: 'value2'}
console.log(baz.key2); // value2
আগের সিনট্যাক্সের সাহায্যে আপনি এখন {...foo, ...bar}
আপনার পুরানো মানটিকে পরিবর্তন না করে কোনও নতুন অবজেক্ট যুক্ত করতে স্প্রেড সিনট্যাক্সটি ব্যবহার করতে পারেন :
const foo = {a: 1, b: 2};
const bar = {...foo, ...{['c']: 3}};
console.log(bar); // {a: 1, b: 2, c: 3}
console.log(bar.c); // 3