JavaScript-এ একটি সেট হলো লিস্টের মতো একটি স্ট্রাকচার, যাতে ইউনিক মান থাকে; সেই মানগুলো প্রিমিটিভ হতে পারে, আবার অবজেক্ট রেফারেন্সও হতে পারে। অ্যারের মতো নয়, সেটের এলিমেন্টগুলো ইনডেক্স দিয়ে অ্যাক্সেস করা যায় না।
সেটের যেকোনো এলিমেন্টের সাথে একটি মান স্ট্রিক্টলি ইকুয়াল হলে সেটিতে সেই মান যোগ করা যায় না।
const set = new Set();
const object = { color: 'lime green' };
const functionallyIdenticalObject = { color: 'lime green' };
set.add(object);
set.add('wow');
set.add(77);
console.log(set.size);
//=> 3
set.add(functionallyIdenticalObject); // added because functionallyIdenticalObject is not strictly equal to object
console.log(set.size);
//=> 4
set.add(77); // not added because 77 is strictly equal to 77
console.log(set.size);
//=> 4
সেট তৈরি করার সময় আপনি আর্গুমেন্ট হিসেবে একটি অ্যারে দিতে পারেন; তখন অ্যারের মানগুলোই সেটের মান হয়ে যাবে, আর ডুপ্লিকেট মানগুলোও বাদ পড়বে।
const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]
console.log(set.size);
//=> 3
একটি সেটকে অ্যারেতে রূপান্তর করতে আপনি Array.from() ব্যবহার করতে পারেন, যা সেট বা ম্যাপের মতো ইটারেবলকে অ্যারেতে রূপান্তর করে।
const set = new Set();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
const array = Array.from(set);
console.log(array);
//=> [1, 2, 3, 4]
অজান আসন্ন একটি রোড ট্রিপের জন্য প্লেলিস্ট তৈরি করছেন। তিনি একই ট্র্যাক একবারের বেশি শুনতে চান না, কিন্তু প্লেলিস্টটি এতটাই লম্বা হয়ে গেছে যে কোন ট্র্যাকগুলো আগেই যোগ করা হয়েছে তা মনে রাখতে তাঁর সমস্যা হচ্ছে।
অজানের মিউজিক প্লেয়ারের API শুধু অ্যারে নিয়ে কাজ করতে জানে, তাই প্লেলিস্টে যোগ করার আগে কোনো ট্র্যাক আছে কি না তা Array.indexOf() দিয়ে যাচাই করার জন্য তিনি কিছু কোড লিখতে চেষ্টা করেন। দুঃখজনকভাবে, তাঁর প্রোগ্রামটি চালাতে অনেক বেশি সময় লাগে। তাঁর আপনার সাহায্য দরকার!
অজানকে সাহায্য করতে গিয়ে আপনি অবাক হয়ে দেখেন যে তাঁর প্লেলিস্টে পাঁচ লক্ষ ট্র্যাক রয়েছে। হয়তো আপনি এমন কোনো ভিন্ন ডেটা স্ট্রাকচার জানেন, যা দিয়ে প্লেলিস্টটি আরও দক্ষতার সাথে পরিচালনা করা যাবে?
removeDuplicates ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি প্লেলিস্টকে প্যারামিটার হিসেবে নেয় এবং এমন একটি নতুন প্লেলিস্ট রিটার্ন করে যেখানে সব ট্র্যাক ইউনিক।
const playlist = [
'Court and Spark - Joni Mitchell',
'Big Yellow Taxi - Joni Mitchell',
'Court and Spark - Joni Mitchell',
];
removeDuplicates(playlist);
//=> ['Court and Spark - Joni Mitchell', 'Big Yellow Taxi - Joni Mitchell']
hasTrack ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি প্লেলিস্ট ও একটি ট্র্যাক প্যারামিটার হিসেবে নেয় এবং একটি বুলিয়ান রিটার্ন করে, যা বলে দেয় প্লেলিস্টে ট্র্যাকটি আছে কি না।
const playlist = [
'The Fashion Show - Grace Jones',
'Dr. Funkenstein - Parliament',
];
hasTrack(playlist, 'Dr. Funkenstein - Parliament');
//=> true
hasTrack(playlist, 'Walking in the Rain - Grace Jones');
//=> false
addTrack ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি প্লেলিস্ট ও একটি ট্র্যাক প্যারামিটার হিসেবে নেয় এবং ট্র্যাকটি-সহ একটি নতুন প্লেলিস্ট রিটার্ন করে।
const playlist = ['Selma - Bijelo Dugme'];
addTrack(playlist, 'Atomic Dog - George Clinton');
//=> ['Selma - Bijelo Dugme', 'Atomic Dog - George Clinton']
addTrack(playlist, 'Selma - Bijelo Dugme');
//=> ['Selma - Bijelo Dugme', 'Atomic Dog - George Clinton']
deleteTrack ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি প্লেলিস্ট ও একটি ট্র্যাক প্যারামিটার হিসেবে নেয় এবং ট্র্যাকটি ছাড়া একটি নতুন প্লেলিস্ট রিটার্ন করে।
const playlist = [
'The Treasure - Fra Lippo Lippi',
'After the Fall - Klaus Nomi',
];
deleteTrack(playlist, 'The Treasure - Fra Lippo Lippi');
//=> ['After the Fall - Klaus Nomi']
deleteTrack(playlist, 'I Feel the Magic - Belinda Carlisle');
//=> ['After the Fall - Klaus Nomi']
listArtists ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি প্লেলিস্টকে প্যারামিটার হিসেবে নেয় এবং প্লেলিস্টে থাকা ইউনিক শিল্পীদের তালিকা রিটার্ন করে। মনে রাখবেন, ট্র্যাকের নামগুলো <SONG> - <ARTIST> আকারে লেখা থাকে।
const playlist = [
'All Mine - Portishead',
'Sight to Behold - Devendra Banhart',
'Sour Times - Portishead',
];
listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।