Js array-introduction part-1
Tags: javascript
Published: 2023-08-01 10:35:44

আমরা প্রায়ই দেখতে পাই যে আমাদের একটি ordered collection এর প্রয়োজন, যেখানে আমাদের একটি ১ম, একটি 2য়, একটি 3য় উপাদান রয়েছে এবং আরও অনেক কিছু রয়েছে।

উদাহরণস্বরূপ, কোনো কিছুর একটি list তৈরি করার জন্য আমাদের এইধরণের ordered collection প্রয়োজন। যেমন: একটি সাইটের ইউজার কালেকশন, প্রোডাক্ট কালেকশন, এইচটিএমএল এলিমেন্টস ইত্যাদি।

এখানে কোনো [অবজেক্ট (Anothother data structure in js are containers for named values called properties)](https://sndpbag4you.com/object-in-javascript.html) ব্যবহার করা সুবিধাজনক নয়, কারণ এটি উপাদানের order মেইন্টেইন করার জন্য কোনো মেথড প্রদান করে না। আবার আমরা existing মানগুলোর “মাঝে” কোনো একটি পজিশনে একটি নতুন মান insert করতে পারি না। অবজেক্ট এই ধরনের পরিস্তিতিতে ব্যবহারের জন্য উপযোগী না।

তাই, যেকোনো ordered collection স্টোর করার জন্য Array নামে একটি নির্দিষ্ট [ডেটা স্ট্র্যাকচার](https://www.freecodecamp.org/news/data-structures-in-javascript-with-examples/) ব্যাবহার করা হয়।

> **সংজ্ঞাঃ**

MDN এর সংজ্ঞা অনুযায়ী,
The Array object enables storing a collection of multiple items under a single variable name and has members for performing common array operations.

> **কেনো অ্যারে ব্যাবহার করবো?**

আপনার যদি কিছু আইটেমের একটি তালিকা থাকে (উদাহরণস্বরূপ, গাড়ির নামের একটি তালিকা), এবং গাড়িগুলিকে ভেরিয়েবলে সংরক্ষণ করা হলে এইরকম দেখাতে পারে:

    let car1 = “Toyota”;

    let car2 = “Volvo”;

    let car3 = “BMW”;

যাইহোক, যদি আপনি এখন এই গাড়ির নামগুলোর উপর একটি লুপ চালাতে চান এবং একটি নির্দিষ্ট গাড়ি খুঁজে পেতে চান? এবং যদি আপনার 3টি গাড়ির পরিবর্তে 300টি গাড়ি থাকে?

তাহলে কি আপনি ৩০০টি ভেরিয়েবল ডিক্লেয়ার করবেন?

অবশ্যই আপনার উত্তর হবে “না!!!!! মাথা খারাপ?😑😵‍💫”

তাহলে এর সমাধান কি🤔?

সমাধান হচ্ছে একটি অ্যারে!🥳

একটি অ্যারে শুধুমাত্র একটি ভেরিয়েবলের মধ্যেই অনেকগুলি মান স্টোর করে রাখতে পারে এবং আপনি একটি নির্দিষ্ট ইনডেক্স নম্বর দিয়ে একটি নির্দিষ্ট মান অ্যাক্সেস করতে পারেন।

> **অ্যারে ডিক্লারেশনঃ**

    অ্যারে লিটেরাল ব্যাবহার করে অ্যারে তৈরি করাটা খুবই সহজ একটা পদ্দতি। এবং এটিই সবচেয়ে বেশি ব্যাবহার করা হয়। এটির সিন্ট্যাক্সঃ-

const array_name = [item1, item2, …];

যেমনঃ

const cars = [“Saab”, “Volvo”, “BMW”];

এইখানে, স্পেইস এবং লাইন ব্রেক মেজর কোনো ইস্যু না। একটি অ্যারে ডিক্লারেশন একাধিক লাইন বিস্তৃত করতে পারে:

const cars = [
"Saab",
"Volvo",
"BMW"
];

2. জাভাস্ক্রিপ্টের new keyword ব্যাবহার করেও অ্যারে তৈরি করা যেতে পারে। এটির সিন্ট্যাক্সঃ-

const cars = new Array("Saab", "Volvo", "BMW");

এইদুইটি পদ্ধতি একদমই একই কাজ করে।

Simplicity, readability এবং execution speed এর জন্য, “অ্যারে লিটারেল” পদ্ধতি ব্যবহার করতে পারেন।😎

এছাড়া আরও একটি উপায়ে অ্যারে তৈরি করা যায়। সেটিকে বলে, “Empty array initialization” পদ্ধতি। যেমনঃ

const cars = [];
cars[0]= "Saab";
cars[1]= "Volvo";
cars[2]= "BMW";

এই পদ্ধতিতে প্রথমে একটি empty অ্যারে ইনিশিয়ালাইজ করা হয়। অর্থাৎ, এই অ্যারেতে প্রথমে কোনো উপাদান রাখা হয় না। পরে, প্রয়োজন অনুযায়ী insert করা হয়ে থাকে। এইটা একদমই উপরে দেখানো প্রথম পদ্ধতির মতোই।

    cars[0]= “Saab”;

    cars[1]= “Volvo”;

    cars[2]= “BMW”;

এই বিষয়গুলো বুঝতে পারছেন না? টেনশনের কিছু নেই। নিচে অ্যারে ইনডেক্স সেকশনে বিস্তারিত দেওয়া হয়েছে।

> **অ্যারের উপাদান অ্যাকসেস করার উপায়ঃ**
 
অ্যারের উপাদানগুলো index number এর মাধ্যমে access করতে হয়। এই ইনডেক্স নম্বরটি হচ্ছে কোনো একটি উপদান একটি অ্যারেতে কতো নম্বর পজিশনে আছে সেটি নির্দেশ করে। এবং এটির কাউন্ট শূন্য থেকে শুরু হয়। তাহলে অ্যারের প্রথম উপাদানের ইনডেক্স হচ্ছে ০ (শূন্য)। আর দ্বিতীয় উপাদানের ইনডেক্স হচ্ছে ১। এখন দেখেনি কিভাবে এই ইন্ডেক্স নম্বর ব্যাবহার করে কোনো উপাদান access করা হয়।

let fruits = ["Apple", "Orange", "Plum"];
alert( fruits[0] ); // Apple
alert( fruits[1] ); // Orange
alert( fruits[2] ); // Plum

প্রথমে অ্যারে ভেরিয়েবলটির নাম লিখতে হয়। তারপর কোনো স্পেইস না দিয়ে [ ] (ব্র্যাকেট নোটেশন) লিখতে হবে। এরপর এই ব্র্যাকেটের মধ্যে ইন্ডেক্স নম্বর লিখতে হয়। তাহলে সিনট্যাক্সটা হলোঃ-

    arrayName[indexNumber]

তাহলে এখন দেখি বলেনতো, এই অ্যারে থেকে প্রথম উপাদান পেতে চাইলে কিভাবে পাওয়া যাবে ❓

    const player = [“Artemis”, 35, “5’11”, “06:23:00”];

> **অ্যারের উপাদান পরিবর্তন করার উপায়ঃ**

অ্যারের যেকোনো একটি উপদান আমরা চাইলে পরিবর্তন মানে রিপ্লেইস করতে পারি। উপররের উদাহরণ অনুযায়ী fruits অ্যারের দ্বিতীয় উপাদান হচ্ছে “Plum”. আর যদি আমরা এটি পরিবর্তন করে ফেলতে চাই সেক্ষেত্রে নিচের কোডটুকু লিখলেই হবেঃ

    fruits[2] = ‘Pear’; // now [“Apple”, “Orange”, “Pear”]

আবার, আমরা চাইলে কোনো একটিতে যেকোনো একটি পজিশনে নতুন উপাদান insert করে ফেলতে পারি।

    fruits[3] = ‘Lemon’; // [“Apple”, “Orange”, “Pear”, “Lemon”]

আচ্ছা, এখন যদি আপনি এই অ্যারের 6 নম্বর পজিশনে একটি নতুন উপাদান অ্যাড করেন তাহলে কি হবে ❓🤔

    fruits[6] = “Mango”;

এক্ষেত্রে অ্যারেটির আউটপুট হবে,

    [“Apple”, “Orange”, “Pear”, “Lemon”, undefined, undefined, “Mango”]

⚠️যেহেতু ৪ এবং ৫ নম্বর ইন্ডেক্সে আপনি কোনো মান assign করেননি সেহেতু এইগুলো undefined থেকে যাচ্ছে।

সম্পূর্ণ একটি অ্যারে access করতে হলে এইভাবে করতে পারি আমরাঃ

let fruits = ["Apple", "Orange", "Plum"];
console.log( fruits ); // Apple,Orange,Plum

> **অ্যারে হল একধরণের অবজেক্ট**
 
জাভাস্ক্রিপ্টে অ্যারে হচ্ছে একটি বিশেষ ধরণের অবজেক্ট। জাভাস্ক্রিপ্টের “typeof” অপারেটর অ্যারের জন্য “object” রিটার্ন করে।

    console.log(typeof [1,2,3]) // object

কিন্তু, অ্যারে এর “উপাদান” অ্যাক্সেস করতে “ইনডেক্স সংখ্যা” ব্যবহার করা হয়। অন্যদিকে অবজেক্ট তার কোনো একটি মেম্বার বা প্রোপার্টি অ্যাকসেস করার ক্ষেত্রে ঐ প্রোপার্টির নাম ব্যাবহার করে থাকে।

const person = ["John", "Doe", 46];
console.log(person[0]) // "John"
const person = {firstName:"John", lastName:"Doe", age:46};
console.log(person.firstName) // "John"

যেহেতু, অ্যারে একধরণের অবজেক্ট সেহেতু অ্যারেতে আমরা চাইলে বিভিন্ন ধরণের ডাটা রাখতে পারি। যেমনঃ string, boolean, number, object, array, এমনকি function ও রাখতে পারি। 😎

// mix of values
let arr = [ 'Apple', { name: 'John' }, true, function() { alert('hello'); } ];
// get the object at index 1 and then show its name
alert( arr[1].name ); // John

> **দ্য length প্রোপার্টিঃ**

অ্যারের উপাদানগুলির total count(মোট গণনা) হল এর length।বা, একটি অ্যারেতে মোট যতগুলি উপাদান আছে সেটিই হলো ঐ অ্যারের length। একটা অ্যারেতে কয়টি উপাদান আছে সেটি আমরা length প্রোপার্টি ব্যাবহার করে জানতে পারি। সিন্টাক্সঃ

    arrayName.length;

let fruits = ["Apple", "Orange", "Plum"];
let length = fruits.length;
console.log(length) // 3

💡 Tips: length এর মান সর্বদা অ্যারের শেষ ইনডেক্স এর চেয়ে এক বেশি।

যদি arrayName[0] আমাদেরকে একটি অ্যারের প্রথম উপাদান দেয়। তাহলে ঐ অ্যারেটির শেষ উপাদান আমরা কিভাবে অ্যাকসেস করতে পারবো? যদি শেষ ইন্ডেক্স জানা না থাকে বা অনেক উপাদানের অ্যারে হয়?😕 😰

সমাধানের উপায় হচ্ছেঃ আমরা প্রথমে অ্যারেটির length বের করে নিবো। যেহেতু, length এর মান সর্বদা অ্যারের শেষ ইনডেক্স এর চেয়ে এক বেশি। সেহেতু, আমরা এই length থেকে এক বিয়োগ করেই সবশেষ ইন্ডেক্স নম্বরটি পাবো। এরপর এই নম্বরটি array literal এ ব্যাবহার করেই আমরা শেষ উপাদানটি পেয়ে যাবো। একটি উদাহরণ দেখে নিনঃ-

let fruits = ["Apple", "Orange", "Plum"];
console.log( fruits[fruits.length-1] ); // Plum

> **কিভাবে একটি অ্যারে চিনতে হয়**

একটি সাধারণ প্রশ্ন হল: জাভাস্ক্রিপ্টের “typeof” অপারেটর অ্যারের জন্য “object” রিটার্ন করে। তাহলে কোনো একটি ভেরিয়েবল একটি অ্যারে হলে আমি কিভাবে সেটি identify করবো?

সমাধানঃ এই সমস্যা সমাধানের জন্য ECMAScript 5 (JavaScript 2009) একটি নতুন পদ্ধতি সংজ্ঞায়িত করেছেঃ Array.isArray()

যদি কোনো একটি ভেরিয়েবল অ্যারে হয়ে থাকে সেক্ষেত্রে Array.isArray(variableName); রিটার্ন করবে true. অন্যথায়, false রিটার্ন করবে।

let fruits = ["Apple", "Orange", "Plum"];
console.log(Array.isArray(fruits)); // true
let fruits = {name:"Apple", type:"fruit"};
console.log(Array.isArray(fruits)); // false

পরবর্তী কোনো একটি ব্লগে অ্যারে মেথড গুলো সম্পর্কে শিখবো আমরা।

এই ব্লগটিতে বেশকিছু উদাহরণ সংগ্রহ করা হয়েছেঃ [w3schools.com](https://www.w3schools.com/js/default.asp) থেকে।