অবজেক্টের তালা-চাবি
অবজেক্টের মধ্যে কী থাকে? থাকে প্রোপার্টি। প্রোপার্টিগুলার মধ্যে কী থাকে? থাকে দুইটা জিনিস– প্রোপার্টির নাম আর মান। প্রোপার্টির নামকে বলে key, আর প্রোপার্টির মানকে বলে value।
এখন কারো যদি মনে হয়, আমার একটা অবজেক্টের সবগুলা প্রোপার্টির নাম দরকার অর্থাৎ অবজেক্টের মধ্যে যতগুলা প্রোপার্টির key আছে, সবগুলা দরকার, তখন সে Object.keys() ইউজ করতে পারে।
সব কি (Keys)
Object.keys ইউজ করার সিস্টেম হচ্ছে, ডাইরেক্ট Object.keys লিখে ব্র্যাকেটের ভিতরে অবজেক্টের নাম দিয়ে দিবি। তাহলেই সে রিটার্ন হিসেবে অবজেক্টের সবগুলা key একটা অ্যারের মধ্যে রেখে সেই অ্যারে রিটার্ন করে দিবে।
const computer = {
brand: 'lenovo',
price: 35000,
processor: 'intel',
ssd: '512gb'
};
const keys = Object.keys(computer);
console.log(keys);
Output: [ 'brand', 'price', 'processor', 'ssd' ]এইটা অনেক কাজে লাগে। বিশেষ করে, আমি যদি কোনো কারণে অবজেক্টের সব প্রোপার্টির ওপরে লুপ চালাতে যাই। যদিও অবজেক্টের সব প্রোপার্টির ওপরে লুপ চালানোর আলাদা সিম্পল সিস্টেমও আছে। সেটা একটু পরে বলতেছি।
সব মান (Values)
Object.values ইউজ করার সিস্টেম হচ্ছে, ডাইরেক্ট Object.values লিখে ব্র্যাকেটের ভিতরে অবজেক্টের নাম দিয়ে দিবি। তাহলেই সে রিটার্ন হিসেবে অবজেক্টের সবগুলা প্রোপার্টির মান (value) একটা অ্যারের মধ্যে রেখে সেই অ্যারে রিটার্ন করে দিবে।
const values = Object.values(computer);
console.log(values);
Output: [ 'lenovo', 35000, 'intel', '512gb' ]প্রোপার্টি আছে কি না, চেক কর
মাঝেমধ্যে দরকার পড়তে পারে। কোনো একটা অবজেক্টের মধ্যে স্পেসিফিক একটা প্রোপার্টি আছে কি না, সেটা চেক করার একটা সিস্টেম হবে, Object.keys দিয়ে সবগুলা প্রোপার্টির নাম নিয়ে আসবি। তারপর তুই একটা অ্যারে পাবি, যেই অ্যারের মধ্যে সব প্রোপার্টির নাম আছে। আর এইটা যেহেতু একটা অ্যারে, তাই খুব সহজেই এইটার মধ্যে কোনো প্রোপার্টি আছে কি না, চেক করতে পারবি অ্যারের পর includes লিখে।
const profile = {
name: "Rahim",
age: 28,
city: "Dhaka",
};
const profileKeys = Object.keys(profile);
const hasName = profileKeys.includes("name");
console.log(hasName);
Output: trueতবে কোনো একটা অবজেক্টের মধ্যে কোনো একটা প্রোপার্টি আছে কি না, সেটা চেক করার সিম্পল একটা সিস্টেম আছে। শর্ত হিসেবে বেশির ভাগ সময় ইউজ করা হয়। খুবই সিম্পল। জাস্ট if-এর পরে শর্তের মধ্যে প্রোপার্টির নাম লিখবি, তারপর in লিখে অবজেক্টের নাম লিখে দিবি। তাহলে সে চেক করবে, ওই নামের প্রোপার্টি অবজেক্টের মধ্যে আছে কি না।
if ( "email" in profile) {
console.log("email exists");
} else {
console.log("No email. No Spam.");
}
Output: No email. No Spam.ওপরের profile অবজেক্টের মধ্যে email নামে কোনো প্রোপার্টি নাই, তাই আমরা else-এর আউটপুট পেয়েছি।
আরেকটা সিস্টেম আছে। একদম অবজেক্টের নিজস্ব প্রোপার্টি (তার বাপ-দাদার প্রোপার্টি থাকলে সেটাকে ইগনোর করে চেক করবে), এইটা ফিউচারে আরও বিস্তারিত জানতে পারবি। তবে সেটা হচ্ছে, অবজেক্টের নাম লিখে তারপর hasOwnProperty মানে তার নিজস্ব প্রোপার্টি কি না। যদি নিজস্ব প্রোপার্টি হয়, তাহলে true বলবে। আর যদি তার বা তার উত্তরাধিকার সূত্রে (এইটা নিয়ে পরে বলব) পাওয়া প্রোপার্টিও হয়ে থাকে, তাহলেও বলবে false।
এখন উত্তরাধিকারের ক্যাচালে যাওয়ার দরকার নাই। জাস্ট সিম্পলভাবে চিন্তা কর। একদম অবজেক্টের মধ্যে থাকলে true বলবে, আর না থাকলে false বলবে—
if (profile.hasOwnProperty("email")) {
console.log("Email niye boroloki dekhai");
} else {
console.log("Email Chara jibon");
}
Output: Email Chara jibonপ্রোপার্টির নাম (key) আছে কি না, চেক করার পাশাপাশি মাঝেমধ্যে দরকার পড়ে মান চেক করার। যেমন—
if (profile.city === "Dhaka") {
console.log("Jam er sohor Dhaka.");
}
else {
console.log("Aram sob gram e.");
}
Output: Jam er sohor Dhaka.জোড়ায় জোড়ায় entries কর
কখনো রেস্টুরেন্টে যেতে লজ্জা পাবি। দেখবি, সব জোড়ায় জোড়ায় আসতেছে বা জোড়ায় জোড়ায় যাইতেছে। তুই হয়তো জিন্দেগিতে জোড়া হইতে পারবি না। তবে অবজেক্টের প্রতিটা প্রোপার্টি এবং তার মানকে জোড়ায় জোড়ায় হিসেবে দেখতে পারবি। জাস্ট object.entries লিখে তারপর দুইটা ব্র্যাকেটের ভিতরে অবজেক্টের নাম লিখে দিবি নিচের মতো করে। তাহলে অবজেক্টের সব প্রোপার্টির নাম আর মান জোড়ায় জোড়ায় পেয়ে যাবি।
const person = {
name: "Alice",
age: 25,
country: "Bangladesh"
};
const entries = Object.entries(person);
console.log(entries);
Output:
[
["name", "Alice"],
["age", 25],
["country", "Bangladesh"]
]এই আউটপুটে তুই দেখতে পাবি, প্রতিটা প্রোপার্টির নাম এবং তার মান একটা অ্যারের ভেতরে জোড়া হিসেবে এসেছে। একে বলা হয় array of arrays বা two-dimensional array।
অবজেক্টের ওপরে লুপ
মাঝেমধ্যে অবজেক্টের ওপরে লুপ চালানোর দরকার পড়ে। এইটা কয়েকভাবে করা যায়। তারমধ্যে সবচেয়ে কমন হচ্ছে for…in লুপ।
এই for in লুপ জাস্ট for of লুপের খালাতো ভাই। জাস্ট অ্যারের উপাদানগুলোর ওপরে লুপ চালানোর জন্য for of চালাই। আর অবজেক্টের ওপরে লুপ চালানো জন্য for in ইউজ করবে। লুপ করলে লুপের মধ্যে লুপ ভেরিয়েবল হিসেবে প্রোপার্টির key হিসেবে প্রোপার্টির নাম দিবে। তারপর প্রোপার্টির মান বা ভ্যালু পাওয়ার জন্য অবজেক্টের পর ব্র্যাকেট দিয়ে key বসিয়ে দিলেই প্রত্যেকটা প্রোপার্টির মানও পেয়ে যাবি।
নিচের কোডটা দেখে রাখ।
const profile = {
name: "Rahim",
age: 28,
city: "Dhaka"
};
for (const key in profile) {
const value = profile[key];
console.log(key, value);
}
Output:
name Rahim
age 28
city Dhakafor in আসার আগে একটা অবজেক্টের সব প্রোপার্টির ওপরে লুপ চালানোর একটা কমন সিস্টেম ছিল Object.keys দিয়ে সব key-গুলাকে নিয়ে আসা। নিয়ে আসলে তো সেটা একটা অ্যারে হয়ে গেল। এরপর একটা অ্যারের ওপরে যেভাবে ফর লুপ বা for of চালানো যায়, সেটা চালিয়ে দেওয়া। আর for of-এর ভিতরে যেহেতু key একটা একটা করে পাওয়া যাবে, তখন key দিয়ে সহজেই প্রোপার্টির মান বা ভ্যালু বের করে ফেলতে পারবি।
const profile = { name: "Rahim", age: 28, city: "Dhaka" };
const keys = Object.keys(profile);
for (const key of keys) {
console.log(key, profile[key]);
}
Output:
name Rahim
age 28
city Dhakaআমি জাস্ট দুইটা সিস্টেমের কথা বলছি। এমন আরও অনেক সিস্টেম আছে অবজেক্টের ওপরে লুপ চালানোর। সেগুলা ধীরে ধীরে শিখবি।
JavaScript Object Keys and Values Practice:
- বই নামে একটা অবজেক্ট বানিয়ে ফেল। সেটার মধ্যে বইয়ের নাম, লেখক, দাম ইত্যাদি থাকবে। তারপর অবজেক্টের সব প্রোপার্টি (keys) এবং সব ভ্যালু (values) কনসোল লগ কর।
- এই অবজেক্টটিতে চেক কর, author প্রোপার্টি আছে কি না। const article = { title: "Learning JS", category: "Programming" };
- তোকে ল্যাপটপ নামের একটা অবজেক্ট দেয়া হলো— const laptop = { brand: "Dell", model: "Inspiron", price: 45000 }; এইবার for...in লুপ চালিয়ে প্রতিটি প্রোপার্টি এবং তার মান প্রিন্ট কর।
- একটা phone নামের অবজেক্ট আছে। const phone = { brand: "Samsung", model: "Galaxy S21", price: 85000 }; এইটার জন্য Object.keys ব্যবহার করে for...of লুপ চালিয়ে প্রতিটি প্রোপার্টি এবং তার মান কনসোল লগ কর।
- তুই একটা bike অবজেক্ট বানাস, যেখানে brand: "Hero", price: 120000, আর model: "Splendor" প্রোপার্টিগুলো থাকবে। Object.values() মেথড ব্যবহার করে সব ভ্যালুগুলো বের কর।
- const books = { book1 "Harry Potter", book2 "The Hobbit", book3 "Game of Thrones" }; এর ওপরে লুপ চালিয়ে সব বইয়ের নাম কনসোল লগ কর।
- সংখ্যার একটি অবজেক্ট দিলাম— const numbers = { a: 10, b: 20, c: 30, d: 40 }; এইবার বুদ্ধি খাটিয়ে এই অবজেক্টের সব প্রোপার্টির ভ্যালুগুলোর যোগফল বের কর।
- একটা player অবজেক্ট বানা, যেখানে name Messi, team Argentina, আর goals 91 থাকবে। Object.values ব্যবহার করে সব ভ্যালু বের কর।
- একটা building অবজেক্ট বানা, যার মধ্যে floors 10, address {street Main Road, city Dhaka}, আর type Commercial। এখন একটা for...in লুপ চালিয়ে সব প্রোপার্টি আর ভ্যালু প্রিন্ট কর।