কখন সরল জাভাস্ক্রিপ্ট অবজেক্টের পরিবর্তে মানচিত্র ব্যবহার করবেন?
সরল জাভাস্ক্রিপ্ট অবজেক্ট {কী: 'মান' struct কাঠামোগত ডেটা ধারণ করে। তবে সাধারণ জেএস বস্তুর সীমাবদ্ধতা রয়েছে:
কেবলমাত্র স্ট্রিং এবং চিহ্নগুলি অবজেক্টের কী হিসাবে ব্যবহার করা যেতে পারে। যদি আমরা অন্য কোনও জিনিস বলে, সংখ্যাকে কোনও বস্তুর কী হিসাবে ব্যবহার করি তবে সেই কীগুলি অ্যাক্সেস করার সময় আমরা দেখতে পাব যে কীগুলি স্ট্রিংয়ে রূপান্তরিত হবে স্পষ্টভাবে আমাদের প্রকারের ধারাবাহিকতা হারাতে বাধ্য করে। কনস্ট নামগুলি = {1: 'এক', 2: 'দুই'}; Object.keys (নাম); // ['1', '2']
জেএস শনাক্তকারীকে কোনও সামগ্রীর মূল নাম (যেমন টু স্ট্রিং, কনস্ট্রাক্টর ইত্যাদি) লিখে প্রোটোটাইপগুলি থেকে দুর্ভাগ্যক্রমে উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্যগুলি ওভাররাইট করার সম্ভাবনা রয়েছে are
অন্য একটি অবজেক্টের কী হিসাবে ব্যবহার করা যাবে না, সুতরাং কোনও বস্তুর জন্য অন্য কোনও অবজেক্টের কী হিসাবে লেখার মাধ্যমে কোনও অতিরিক্ত তথ্য রচনা করা যাবে না এবং অন্য একটি বস্তুর মান অতিরিক্ত তথ্য ধারণ করবে
বস্তুগুলি পুনরাবৃত্তকারী নয়
কোনও বস্তুর আকার সরাসরি নির্ধারণ করা যায় না
অবজেক্টের এই সীমাবদ্ধতা মানচিত্র দ্বারা সমাধান করা হয়েছে তবে আমাদের মানচিত্রকে প্রতিস্থাপনের পরিবর্তে অবজেক্টের পরিপূরক হিসাবে বিবেচনা করতে হবে। মূলত মানচিত্রটি অ্যারেগুলির কেবল অ্যারে তবে আমাদের অবশ্যই সেই অ্যারেগুলির অ্যারেটি নতুন কীওয়ার্ড সহ যুক্তি হিসাবে মানচিত্রের কাছে পৌঁছে দিতে হবে অন্যথায় কেবল অ্যারের অ্যারের জন্যই মানচিত্রের দরকারী বৈশিষ্ট্য এবং পদ্ধতি উপলব্ধ নেই। এবং মনে রাখবেন অ্যারের অ্যারের ভিতরে কী-মান জোড়গুলি বা মানচিত্রটি কেবল কমা দ্বারা পৃথক করা উচিত, সরল বস্তুগুলির মতো কোনও কলোন নেই।
মানচিত্র বা কোনও অবজেক্ট ব্যবহার করবেন কিনা তা স্থির করার জন্য 3 টিপস:
রান সময় পর্যন্ত কীগুলি অজানা থাকা অবস্থায় অবজেক্টগুলির উপরে মানচিত্র ব্যবহার করুন কারণ ব্যবহারকারী ইনপুট দ্বারা তৈরি বা অজান্তেই কীগুলি সেই আইটেমটি ব্যবহার করে এমন কোডটি ভেঙে ফেলতে পারে যদি সেই কীগুলি বস্তুর উত্তরাধিকারী বৈশিষ্ট্যগুলিকে ওভাররাইট করে, সুতরাং সেই ক্ষেত্রে মানচিত্রটি আরও নিরাপদ। সমস্ত কী একই ধরণের এবং সমস্ত মানচিত্র একই ধরণের হলে মানচিত্রগুলিও ব্যবহার করুন।
কী হিসাবে আদিম মান সংরক্ষণের প্রয়োজন হলে মানচিত্র ব্যবহার করুন।
আমাদের স্বতন্ত্র উপাদানগুলিতে অপারেট করার প্রয়োজন হলে অবজেক্টগুলি ব্যবহার করুন।
মানচিত্র ব্যবহারের সুবিধাগুলি হ'ল:
১. মানচিত্র যেকোন কী প্রকার গ্রহণ করে এবং কী প্রকারটি সংরক্ষণ করে:
আমরা জানি যে যদি অবজেক্টের কীটি স্ট্রিং বা প্রতীক না হয় তবে জেএস সুস্পষ্টভাবে এটিকে একটি স্ট্রিংয়ে রূপান্তরিত করে। বিপরীতে, মানচিত্র যে কোনও ধরণের কীগুলি গ্রহণ করে: স্ট্রিং, সংখ্যা, বুলিয়ান, প্রতীক ইত্যাদি এবং মানচিত্র মূল কী ধরণের সংরক্ষণ করে। এখানে আমরা মানচিত্রের অভ্যন্তরে কী হিসাবে নম্বরটি ব্যবহার করব এবং এটি একটি নম্বর থাকবে:
const numbersMap= new Map();
numbersMap.set(1, 'one');
numbersMap.set(2, 'two');
const keysOfMap= [...numbersMap.keys()];
console.log(keysOfMap); // [1, 2]
মানচিত্রের অভ্যন্তরে আমরা এমনকি একটি সম্পূর্ণ অবজেক্টটিকে কী হিসাবে ব্যবহার করতে পারি। এমন অনেক সময় থাকতে পারে যখন আমরা কোনও অবজেক্ট সম্পর্কিত ডেটা সংরক্ষণ করতে চাই, অবজেক্টের ভিতরে এই ডেটা সংযুক্ত না করে যাতে আমরা হতাশ বস্তুগুলির সাথে কাজ করতে পারি তবে অবজেক্ট সম্পর্কে কিছু তথ্য সঞ্চয় করতে চাই। এই ক্ষেত্রে আমাদের মানচিত্রটি ব্যবহার করতে হবে যাতে আমরা বস্তুকে কী হিসাবে এবং সামগ্রীর সম্পর্কিত ডেটাটিকে মান হিসাবে তৈরি করতে পারি।
const foo= {name: foo};
const bar= {name: bar};
const kindOfMap= [[foo, 'Foo related data'], [bar, 'Bar related data']];
তবে এই পদ্ধতির ক্ষতিটি হ'ল কী দ্বারা মানটি অ্যাক্সেস করার জটিলতা, কারণ আমাদের পছন্দসই মান পেতে পুরো অ্যারেটি লুপ করতে হয়।
function getBy Key(kindOfMap, key) {
for (const [k, v] of kindOfMap) {
if(key === k) {
return v;
}
}
return undefined;
}
getByKey(kindOfMap, foo); // 'Foo related data'
সঠিক মানচিত্র ব্যবহার করে আমরা মানটিতে সরাসরি অ্যাক্সেস না পাওয়ার এই সমস্যাটি সমাধান করতে পারি।
const foo= {name: 'foo'};
const bar= {name: 'bar'};
const myMap= new Map();
myMap.set(foo, 'Foo related data');
myMap.set(bar, 'Bar related data');
console.log(myMap.get(foo)); // 'Foo related data'
আমরা WeakMap ব্যবহার করে এটি করতে পারতাম, কেবল মাইম্যাপ = নতুন WeakMap () লিখতে হত। মানচিত্র এবং উইকম্যাপের মধ্যে পার্থক্যগুলি হ'ল উইকম্যাপ কীগুলির আবর্জনা সংগ্রহের অনুমতি দেয় (এখানে বস্তুগুলি) যাতে এটি মেমরি ফাঁস রোধ করে, উইকম্যাপ কেবলমাত্র বস্তুকে কী হিসাবে গ্রহণ করে এবং উইকম্যাপের পদ্ধতিগুলির সেট হ্রাস করেছে has
২. মানচিত্রের মূল নামগুলির উপর কোনও বাধা নেই:
সাধারণ জেএস বস্তুর জন্য আমরা দুর্ঘটনাক্রমে প্রোটোটাইপ থেকে উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তিটি ওভাররাইট করতে পারি এবং এটি বিপজ্জনক হতে পারে। এখানে আমরা অভিনেতা অবজেক্টের টস্ট্রিং () সম্পত্তিটি ওভাররাইট করব:
const actor= {
name: 'Harrison Ford',
toString: 'Actor: Harrison Ford'
};
সরবরাহ করা যুক্তি কোন সরল বস্তু কিনা তা নির্ধারণ করার জন্য এখন একটি fn isPlainObject () সংজ্ঞায়িত করা যাক এবং এই fn এটি পরীক্ষা করার জন্য toString () পদ্ধতি ব্যবহার করে:
function isPlainObject(value) {
return value.toString() === '[object Object]';
}
isPlainObject(actor); // TypeError : value.toString is not a function
// this is because inside actor object toString property is a string instead of inherited method from prototype
মানচিত্রে মূল নামগুলির উপর কোনও বিধিনিষেধ নেই, আমরা টপস্ট্রিং, কনস্ট্রাক্টর ইত্যাদির মতো কীগুলি ব্যবহার করতে পারি।
const actorMap= new Map();
actorMap.set('name', 'Harrison Ford');
actorMap.set('toString', 'Actor: Harrison Ford');
function isMap(value) {
return value.toString() === '[object Map]';
}
console.log(isMap(actorMap)); // true
যদি আমাদের এমন পরিস্থিতি হয় যেখানে ব্যবহারকারী ইনপুট কীগুলি তৈরি করে তবে অবশ্যই আমাদের অবশ্যই এই কীগুলি একটি সরল বস্তুর পরিবর্তে মানচিত্রের ভিতরে নিয়ে যেতে হবে। এটি কারণ, ব্যবহারকারীরা কাস্টম ফিল্ডের নাম পছন্দ করতে পারে, যেমন, স্ট্রিং, কনস্ট্রাক্টর ইত্যাদি then সুতরাং সঠিক সমাধানটি হ'ল একটি মানচিত্রে ইউজার ইন্টারফেসের স্থিতিকে আবদ্ধ করা, মানচিত্রটি ভাঙ্গার কোনও উপায় নেই:
const userCustomFieldsMap= new Map([['color', 'blue'], ['size', 'medium'], ['toString', 'A blue box']]);
৩. মানচিত্রটি পুনরাবৃত্তিযোগ্য:
একটি সরল বস্তুর বৈশিষ্ট্য পুনরাবৃত্তি করতে আমাদের অবজেক্ট.এন্ট্রি () বা অবজেক্ট.কিজ () দরকার। অবজেক্ট.এন্টরিজ (প্লেইনওজেক্ট) অবজেক্ট থেকে নিষ্ক্রিয় কী মান জোড়ার একটি অ্যারে প্রদান করে, তারপরে আমরা সেই কীগুলি এবং মানগুলি গঠন করতে পারি এবং সাধারণ কী এবং মানগুলির আউটপুট পেতে পারি।
const colorHex= {
'white': '#FFFFFF',
'black': '#000000'
}
for(const [color, hex] of Object.entries(colorHex)) {
console.log(color, hex);
}
//
'white' '#FFFFFF'
'black' '#000000'
মানচিত্রগুলি পুনরাবৃত্তিযোগ্য তাই এজন্য আমাদের মানচিত্রের পুনরাবৃত্তি এবং কী তৈরির জন্য প্রবেশের () পদ্ধতির প্রয়োজন নেই, মানচিত্রে মানচিত্রের ভিতরে সরাসরি মানচিত্রের সাহায্যে কাজ করা যেতে পারে প্রতিটি উপাদান কমা দ্বারা পৃথক পৃথক মূল মান জোড়ার অ্যারে হিসাবে বাস করে ।
const colorHexMap= new Map();
colorHexMap.set('white', '#FFFFFF');
colorHexMap.set('black', '#000000');
for(const [color, hex] of colorHexMap) {
console.log(color, hex);
}
//'white' '#FFFFFF' 'black' '#000000'
এছাড়াও map.keys () কী এবং মানচিত্রের উপরে একটি পুনরাবৃত্তিকে ফেরত দেয় map
৪. আমরা সহজেই একটি মানচিত্রের আকার জানতে পারি
আমরা সরাসরি কোনও সরল বস্তুতে সম্পত্তিগুলির সংখ্যা নির্ধারণ করতে পারি না। আমাদের একটি সহায়িকা দরকার যেমন, অবজেক্ট.কিজ () যা বস্তুর কীগুলির সাথে একটি অ্যারের প্রদান করে তারপরে দৈর্ঘ্যের সম্পত্তি ব্যবহার করে আমরা কীগুলির সংখ্যা বা প্লেইন অবজেক্টের আকার পেতে পারি।
const exams= {'John Rambo': '80%', 'James Bond': '60%'};
const sizeOfObj= Object.keys(exams).length;
console.log(sizeOfObj); // 2
তবে মানচিত্রের ক্ষেত্রে আমরা ম্যাপের আকারের আকারে সরাসরি অ্যাক্সেস করতে পারি।
const examsMap= new Map([['John Rambo', '80%'], ['James Bond', '60%']]);
console.log(examsMap.size);