JavaScript Arrays: Intermediate (অ্যারে)
map, filter, find, findIndex, some, every, includes, indexOf, reduce, slice/splice, spread, destructuring, sort, nested array — বাংলা গাইড।
এবার অ্যারের সবচেয়ে দরকারি বিল্ট-ইন মেথডগুলো দেখি। এগুলো functional প্রোগ্রামিং-এর মূল হাতিয়ার — লুপ কমে, কোড readable হয়।
map
const prices = [100, 250, 300];
const withVat = prices.map(p => p * 1.15);
console.log(withVat); // [115, 287.5, 345]
console.log(prices); // [100, 250, 300] — মূল অপরিবর্তিতmap() প্রতিটি element-এর জন্য callback চালিয়ে একটি নতুন array দেয়। মূল array বদলায় না।
filter
const prices = [100, 250, 300, 150];
const onSale = prices.filter(p => p < 250);
console.log(onSale); // [100, 150]filter() শর্ত (true) মেনে যাওয়া element-গুলো নিয়ে নতুন array বানায়।
find ও findIndex
const prices = [100, 250, 300, 150];
const found = prices.find(p => p === 300);
console.log(found); // 300 (প্রথম মিলে যাওয়া মান)
const i = prices.findIndex(p => p === 300);
console.log(i); // 2 (সূচক)
console.log(prices.find(p => p === 999)); // undefinedsome ও every
const scores = [70, 85, 90];
const anyFail = scores.some(s => s < 40); // কোনো একটা ৪০-এর নিচে?
const allPass = scores.every(s => s >= 40); // সবগুলো কি পাশ?
console.log(anyFail); // false
console.log(allPass); // trueincludes ও indexOf
const fruits = ["আম", "কলা", "কমলা"];
console.log(fruits.includes("কলা")); // true
console.log(fruits.includes("লিচু")); // false
console.log(fruits.indexOf("কলা")); // 1
console.log(fruits.indexOf("লিচু")); // -1 (খুঁজে পাওয়া যায়নি)reduce
const numbers = [10, 20, 30];
const total = numbers.reduce((sum, n) => sum + n, 0);
console.log(total); // 60reduce() সব element মিলিয়ে একটি ফলাফল দেয়। প্রথম argument (এখানে 0) হলো initial value, প্রতিবার callback-এর result পরের iteration-এ sum হিসেবে যায়।
slice বনাম splice
const fruits = ["আম", "কলা", "কমলা", "লিচু"];
const sliced = fruits.slice(1, 3); // নতুন array: ["কলা", "কমলা"]
console.log(sliced);
console.log(fruits); // মূল অপরিবর্তিত
const removed = fruits.splice(1, 2, "আঙুর"); // ১ থেকে ২টি বাদ, জায়গায় "আঙুর"
console.log(removed); // ["কলা", "কমলা"]
console.log(fruits); // ["আম", "আঙুর", "লিচু"]`slice` একটি নতুন array দেয় (মূল অপরিবর্তিত), আর `splice` মূল array-কেই বদলায় — বাদ ও যোগ দুটোই করে।
concat ও spread
const a = [1, 2];
const b = [3, 4];
const c = a.concat(b);
const d = [...a, ...b];
console.log(c); // [1, 2, 3, 4]
console.log(d); // [1, 2, 3, 4]
const copy = [...a]; // অনুলিপি
copy.push(99);
console.log(a); // [1, 2] — মূল অপরিবর্তিত
console.log(copy); // [1, 2, 99]Destructuring
const [first, second, ...rest] = [10, 20, 30, 40];
console.log(first); // 10
console.log(second); // 20
console.log(rest); // [30, 40]
const [, , third] = [10, 20, 30, 40];
console.log(third); // 30 (ফাঁকা জায়গা দিয়ে স্কিপ)sort ও reverse
const nums = [3, 1, 10, 2];
const sorted = [...nums].sort((x, y) => x - y);
console.log(sorted); // [1, 2, 3, 10]
// spread না করে সরাসরি sort করলে মূল array-ও বদলায়!
const reversed = [...nums].reverse();
console.log(reversed); // [2, 10, 1, 3]sort() ডিফল্টে string হিসেবে সাজায় — তাই সংখ্যার জন্য comparator function ((x, y) => x - y) বাধ্যতামূলক। sort() ও reverse() মূল array-কে বদলায়।
Nested array (মাল্টি-ডাইমেনশনাল)
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
console.log(matrix[0][1]); // 2
console.log(matrix[2][0]); // 7
const flat = matrix.flat();
console.log(flat); // [1, 2, 3, 4, 5, 6, 7, 8, 9]Array of objects
const products = [
{ id: 1, name: "মোবাইল", price: 15000 },
{ id: 2, name: "ল্যাপটপ", price: 65000 },
{ id: 3, name: "হেডফোন", price: 2000 },
];
const names = products.map(p => p.name);
console.log(names); // ["মোবাইল", "ল্যাপটপ", "হেডফোন"]
const cheap = products.filter(p => p.price < 10000);
console.log(cheap.map(p => p.name)); // ["হেডফোন"]
const total = products.reduce((sum, p) => sum + p.price, 0);
console.log(total); // 82000| মেথড | কাজ | ফলাফল |
|---|---|---|
| map() | প্রতিটি element রূপান্তর | নতুন array |
| filter() | শর্ত মেনে বেছে নেয় | নতুন array |
| find() | প্রথম মিলে যাওয়া মান | মান / undefined |
| findIndex() | প্রথম মিলের সূচক | সংখ্যা / -1 |
| some() | কোনো একটিও শর্ত মানে? | true / false |
| every() | সবগুলো শর্ত মানে? | true / false |
| includes() | আছে কি না | true / false |
| indexOf() | মানের সূচক | সংখ্যা / -1 |
| reduce() | সব মিলিয়ে এক ফলাফল | যেকোনো মান |
| slice() | অংশ নিয়ে নতুন array | নতুন array |
| splice() | বাদ/যোগ (মূল বদলায়) | বাদ-পড়া array |
| concat() / spread | array জোড়া | নতুন array |
| sort() / reverse() | সাজানো / উল্টানো | মূল array (mutate) |
products.filter(...).map(...).reduce(...) — মেথডের পর মেথড জুড়ে দিলে এক লাইনে অনেক কাজ হয়। এর জাদু দেখুন advanced chapter-এ।