জাভাস্ক্রিপ্ট ডেটা স্ট্রাকচার - অ্যারে
Tags: javascript, programming, array, bangla
Published: 2023-03-25 16:07:32

সোর্স: www.learnersbucket.com

একই টাইপের অনেকগুলো ডেটা স্ট্রোর করার জন্য যে ডেটা স্ট্রাকচার ব্যবহার করা হয় অ্যারে তার মধ্যে অন্যতম। জাভাস্ক্রিপ্ট-এ অ্যারেও একটি অবজেক্ট যার অ্যারের মতো বৈশিষ্ট্য রয়েছে।

জাভাস্ক্রিপ্ট-এ অ্যারে জিরো ইনবক্স বেইজড, যার মানে অ্যারে এর মধ্যে প্রথম ভ্যালু শূন্যতম পজিশনে দ্বিতীয় ভ্যালু প্রথম পজিশনে তারপর এভাবেই চলতে থাকে।

```
let numbers = [10, 20, 30, 40];
```

## জাভাস্ক্রিপ্ট-এ অ্যারে তৈরি করা
জাভাস্ক্রিপ্ট-এ অনেকগুলো উপায়ে অ্যারে ডিকলার করা যায়। জাভাস্ক্রিপ্ট-এ অ্যারে-এর নির্দিষ্ট কোনো ডাইমেনশন নেই, তাই ডিক্লেয়ার করার সময় সাইজ ঠিক করে দেয়া লাগে না।

### সিনট্যাক্স

```
//[] ব্যবহার করে অ্যারে ডিক্লেয়ার
let week = []; //সহজ উপায়

//সপ্তাহের তিন দিন নিয়ে একটি অ্যারে
let week = ['Monday', 'Tuesday', 'Wednesday'];

//কনস্ট্রাক্টর ব্যবহার করে অ্যারে ডিক্লেয়ার
let week = new Array();  

//অ্যারে লেন্থ ৭ এর একটি অ্যারে
let week = new Array(7); 

//সপ্তাহের তিন দিন নিয়ে একটি অ্যারে
let week = new Array('Monday', 'Tuesday', 'Wednesday'); 
```
[ ] ব্যাবহার করে অ্যারে ডিক্লেয়ার করা বেশি সুবিধাজনক।

জাভাস্ক্রিপ্ট-এ অ্যারে একটি অবজেক্ট তাই চাইলেই জাভাস্ক্রিপ্ট-এ আছে এরকম যে কোনো টাইপের ডেটা একটি অ্যারেতে স্টোর করা যায়।

## অ্যারে লেন্থ
প্রত্যেকটি অ্যারেরই একটি লেন্থ প্রপার্টি থাকে যা ব্যবহার করে আমরা অ্যারের সাইজ জানতে পারি।
```
let week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
console.log(week.length);
//7
```
যেহেতু জাভাস্ক্রিপ্ট-এ নির্দিষ্ট কোন ডায়মেনশন নেই তাই `length` প্রোপার্টি হল সর্বশেষ ইনডেক্স + ১ এর ইলিমেন্ট নির্দেশ করে।
```
let arr = [];
arr[1000] = 1;
console.log(arr.length);
//1001
```
যদিও এখানে ১০০০ তম ইনডেক্সে একটিমাত্র ইলিমিট রয়েছে তারপরও আমরা এখানে অ্যারে লেন্থ ১০০১ পাচ্ছি।
জাভাস্ক্রিপ্ট-এ অ্যারেতে সর্বোচ্চ ৪,২৯৪,৯৬৭,২৯৫ সংখ্যক মান থাকতে পারে।

## অ্যারেতে ইলিমেন্ট অ্যাড করা
### অ্যারে-এর শেষে ইলিমেন্ট অ্যাড করা
অ্যারে-এর শেষে ইলিমেন্ট অ্যাড করার জন্য আমরা `Array.push()` মেথড ব্যবহার করতে পারি।
```
let arr = [1, 2, 3, 4];
arr.push(5);
//[1, 2, 3, 4, 5];
arr.push(6, 7);
//[1, 2, 3, 4, 5, 6, 7];
```
এছাড়া `length` প্রোপার্টি ব্যবহার করেও অ্যারে-এর শেষে ইলিমেন্ট অ্যাড করা যায়।
```
let arr = [1, 2, 3, 4];
arr[arr.length] = 5;
//[1, 2, 3, 4, 5];
```
### অ্যারে-এর শুরুতে ইলিমেন্ট অ্যাড করা
অ্যারে-এর শুরুতে ইলিমেন্ট অ্যাড করার জন্য আমরা `Array.unshift()` মেথড ব্যবহার করতে পারি।
```
let arr = [2, 3, 4, 5];
arr.unshift(0, 1);
//[0, 1, 2, 3, 4, 5];
```

### অ্যারে-এর নির্দিষ্ট কোনো ইনডেক্সে ইলিমেন্ট অ্যাড করা
অ্যারে-এর নির্দিষ্ট ইনডেক্সে ইলিমেন্ট অ্যাড করার জন্য আমরা `Array.splice()` মেথড ব্যবহার করতে পারি।
```
let arr = [1, 2, 3, 5, 6];
arr.splice(3, 0, 4);
//[1, 2, 3, 4, 5, 6]
```
`Array.splice()` সম্পর্কে বিস্তারিত: [Array.splice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)

## অ্যারে থেকে ইলিমেন্ট রিমুভ করা
### অ্যারে-এর শেষ থেকে ইলিমেন্ট রিমুভ করা
অ্যারে-এর শেষ থেকে ইলিমেন্ট রিমুভ করার জন্য আমরা `Array.pop()` মেথড ব্যবহার করতে পারি। এই অ্যারে-এর শেষ ইলিমেন্টটি রিমুভ ও রিটার্ন করে।
```
let arr = [1, 2, 3, 4, 5];
let last = arr.pop();
console.log(arr);
//[1, 2, 3, 4];

console.log(last);
//5
```
আমার `length` প্রোপার্টি ব্যবহার করেও অ্যারে থেকে ইলিমেন্ট রিমুভ করতে পারি। এই পদ্ধতি অ্যারে ছোট করে এবং রিমুভ করা ইলিমেন্ট অ্যাক্সেস করা যায় না।
```
let arr = [1, 2, 3, 4, 5];
arr.length = 3;
console.log(arr);
//[1, 2, 3];
```

### অ্যারে-এর শুরু থেকে ইলিমেন্ট রিমুভ করা
অ্যারে-এর শুরু থেকে ইলিমেন্ট রিমুভ করতে আমরা `Array.shift()` মেথড ব্যবহার করতে পারি।
```
let arr = [1, 2, 3, 4, 5];
console.log(arr.shift());
//1

console.log(arr);
//[2, 3, 4, 5]
```

### অ্যারে-এর নির্দিষ্ট কোনো ইনডেক্সের ইলিমেন্ট রিমুভ করা
অ্যারে-এর নির্দিষ্ট কোনো ইনডেক্সের ইলিমেন্ট রিমুভ করতে আমরা `Array.slice()` বা `Array.splice()` ব্যবহার করতে পারি।
```
let arr = [1, 2, 3, 4, 5];

let elm = arr.splice(2, 1);
console.log(elm);
//3

let elm2 = arr.slice(2, 3);
console.log(elm2);
//4
```
`Array.splice(start, count)` start ইনডেক্স থেকে শুরু করে count পর্যন্ত সকল ইলিমেন্ট রিমুভ করে। এটি অরিজিনাল অ্যারেকে পরিবর্তন করে।
`Array.slice(start, end)` start এবং end ইনডেক্সের মধ্যে সকল ইলিমেন্ট রিমুভ করে। এটি অরিজিনাল অ্যারেকে পরিবর্তন করে না।

## `delete` অপারেটর ব্যবহার করে অ্যারে থেকে ইলিমেন্ট ডিলেট করা
যেহেতু জাভাস্ক্রিপ্ট-এ অ্যারেও অবজেক্ট তাই আমারা `delete` অপারেটর ব্যবহার করে ইলিমেন্ট ডিলেট করতে পারি।
```
let arr = [1, 2, 3, 4, 5];
delete arr[3];
//[1, 2, 3, empty, 5];
```
তবে এই মেথড ব্যবহার করলে ইলিমেন্টটি সম্পুর্ন ভাবে রিমুভ হয় না, এটি শুধু নির্দিষ্ট ইনডেক্সের ইলিমেন্ট ডিলেট করে দেয়।

## অ্যারে-এর ইলিমেন্ট এক্সেস করা
যেহেতু অ্যারে জিরো ইনডেক্স বেইজড তাই আমরা নিউমেরিক ইনডেক্স ব্যবহার করে ইলিমেন্ট এক্সেস করতে পারি।
```
let arr = [1, 2, 3, 4, 5];
arr[0];
//1

arr[1];
//2

arr[2];
//3

arr[3];
//4
```
যদি এমন কোনো ইলিমেন্ট এক্সেস করতে চাওয়া হয় যা অ্যারেতে বিদ্যমান নয় তাহলে `undefined` রিটার্ন করবে।

## অ্যারেতে লুপ এর ব্যবহার
যেহেতু জাভাস্ক্রিপ্ট নিউমেরিক ইনডেক্স বেইজড তাই আমরা এর `length` ব্যবহার করে প্রতিটি ইলিমেন্টের উপর লুপ চালাতে পারি।
### `for` লুপের ব্যবহার
```
let arr = [1, 2, 3, 4, 5];
for(let i = 0; i < arr.length; i++){
   console.log(arr[i]);
}

//1
//2
//3
//4
//5
```
### `for...in` লুপের ব্যবহার
জাভাস্ক্রিপ্ট-এ অ্যারেও অবজেক্ট হওয়ায় আমরা `for...in` লুপ ব্যবহার করতে পারি। তবে খেয়াল রাখতে হবে এক্ষেত্রে প্রোপাটির অর্ডার ঠিক থাকবে তার কোন নিশ্চয়তা নেই।
```
let arr = [1, 2, 3, 4, 5];
for(let prop in arr){
  console.log(arr[prop]);
}

//1
//2
//3
//4
//5
```
### `forEach()` মেথডের ব্যবহার
```
let arr = [1, 2, 3, 4, 5];
arr.forEach((e, i) => {
   console.log(`${e} is at index ${i}`);
});

//1 is at index 0
//2 is at index 1
//3 is at index 2
//4 is at index 3
//5 is at index 4
```
`Array.forEach()` মেথড অ্যারে-এর সকল ইলিমেন্টের উপর লুপ চালায় এবং ইলিমেন্ট ও ইনডেক্স কল ব্যাক ফাংশনে পাস করে।

### `for...of` লুপের ব্যবহার
```
let arr = [1, 2, 3, 4, 5];
for(let val of arr){
   console.log(val);
}

//1
//2
//3
//4
//5
```
## অ্যারে সর্টিং
জাভাস্ক্রিপ্ট-এ অ্যারে সর্টিং এর জন্য নিজস্ব মেথড রয়েছে।
```
let arr = [2, 5, 3, 7, 5];
arr.sort(); //By default in ascending order
//[2, 3, 5, 5, 7];

arr.sort((a, b) => b - a);
//[7, 5, 5, 3, 2]
```
`Array.sort()` মেথড একটি কলব্যাক ফাংশন নেয় এবং রিটার্ন করা ভেলু এর উপর নির্ভর করে ইলিমেন্ট গুলো সর্ট করে।

## অ্যারে-এর মধ্যে ইলিমেন্ট সার্চ করা
জাভাস্ক্রিপ্ট-এ অ্যারে এর মধ্যে ইলিমেন্ট সার্চ করার জন্য নিজস্ব মেথড রয়েছে।
### `Array.indexOf()` ব্যবহার করে সার্চ করা।
`Array.indexOf()` মেথড ম্যাচিং ইলিমেন্টের ইনডেক্স রিটার্ন করে। ইলিমেন্টটি খুঁজে না পেলে -1 রিটার্ন করে।
```
let arr = [2, 5, 3, 7, 5];
arr.indexOf(2);
//0

arr.indexOf(1);
//-1
```
### `Array.includes()` ব্যবহার করে সার্চ করা
`Array.includes()` ES7 এর একটি মেথড, যা অ্যারে-এর মধ্যে কোনো ইলিমেন্ট বিদ্যমান কিনা তা চেক করার জন্য ব্যবহার করা হয়। এটি ইলিমেন্ট খুঁজে পেলে true আর না পেলে false রিটার্ন করে।
```
let arr = [2, 5, 3, 7, 5];
arr.includes(2);
//true

arr.includes(1);
//false
```
## মাল্টি-ডাইমেনশনাল অ্যারে
জাভাস্ক্রিপ্ট-এ অ্যারে অনেক ফ্লেক্সিবাল এবং সাধারনত ইনিশিয়ালাইজড নয়। আমরা যদি ইনিশিয়ালাইজড ভেলু সহ অ্যারে তৈরি করতে চাই তাহলে `Array.fill(value)` ব্যবহার করতে পারি।
```
let arr = new Array(7).fill(1);
//[1, 1, 1, 1, 1, 1, 1];
```
জাভাস্ক্রিপ্ট-এ মাল্টি-ডাইমেনশনাল অ্যারে নেই, কিন্তু একটি অ্যারে-এর মধ্যে আরেকটি অ্যারে রাখা যায়।
```
let matrix = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

/*
(3) [Array(3), Array(3), Array(3)]
0: (3) [1, 2, 3]
1: (3) [4, 5, 6]
2: (3) [7, 8, 9]
length: 3
__proto__: Array(0)
*/
```
আমরা ইলিমেন্ট এক্সেস করার জন্য লুপ চালাতে পারি।
```
for(let i = 0; i < matrix.length; i++){
   for(let j = 0; j < matrix[i].length; j++){
       console.log(matrix[i][j]);
   }
}

//1
//2
//3
//4
//5
.
.
.
```
আমরা দুইটি স্কয়ার ব্রাকেট [][] ব্যবহার করেছি। কারন প্রথম স্কয়ার ব্রাকেট অ্যারে রিটার্ন করে এবং দ্বিতীয় স্কয়ার ব্রাকেট ঐ অ্যারে-এর ইলিমেন্ট এক্সেস করে।
```
let arr = matrix[0];
//[1, 2, 3]

arr[0]
//1

or

let arr = matrix[0][0]
//1
```
যেহেতু আমারা অ্যারে-এর মধ্যে অ্যারে রাখতে পারি, তাই আমরা নেস্টেট অ্যারে তৈরি করতে পারি।
```
let arr = [
   [
     [1, 2, 3],
     [3, 4, 5] 
   ],
   [
     [1, 2, 3],
     [3, 4, 5]
   ]
];

for(let i = 0; i < arr.length; i++){
  for(let j = 0; j < arr[i].length; j++){
    for(let k = 0; k < arr[i][j].length; k++){
        console.log(arr[i][j][k]);
    }
  }
}

//1
//2
//3
//3
//4
//5
.
.
.
```
জাভাস্ক্রিপ্ট অ্যারে-এর নির্দিষ্ট কোনো ডাইমেনশন নেই, তাই আমরা জিগজ্যাক মাল্টি-ডাইমেনশনাল অ্যারে তৈরি করতে পারি।
```
let arr = [
   [1, 2, 3, 4, 5],
   [1, 2],
   [1, 2, 3, 4],
   [1, 2, 3]
];
```
## যেকোনো ভ্যালু অ্যারে কিনা তা চেক করা
জাভাস্ক্রিপ্ট-এ কোনো ভেলু আ্যারে কিনা চেক করার জন্য নিজস্ব মেথড রয়েছে
### `Array.isArray()` মেথড ব্যবহার করে
```
let arr = [1, 2, 3];

Array.isArray(arr);
//true

Array.isArray('string');
//false

Array.isArray({abc: 'xyz'});
///false
```