ট্র্যাক
/
JavaScript
JavaScript
/
সিলেবাস
/
অ্যারে ট্রান্সফরমেশন
অ্

অ্যারে ট্রান্সফরমেশন মধ্যে JavaScript

20টি অনুশীলনী

অ্যারে ট্রান্সফরমেশন সম্পর্কে

JavaScript-এ, Array ক্লাসে অ্যারে রূপান্তরের জন্য অনেক শক্তিশালী বিল্ট-ইন মেথড আছে। এই মেথডগুলো একটি অ্যারে থেকে আরেকটি অ্যারেতে রূপান্তর করাকে সাধারণ একটি for লুপ বা আরও সরাসরি পরিবর্তনের চেয়ে অনেক সহজ করে তোলে।

কিছু মেথড পিওর, অর্থাৎ তারা মূল অ্যারেটি পরিবর্তন করে না। তারা বদলে একটি নতুন অ্যারে রিটার্ন করে। আবার অন্য কিছু মেথড যে অ্যারের উপর কল করা হয় সেটিকেই পরিবর্তন করে এবং পরিবর্তিত অ্যারেটি রিটার্ন করে না।

অ্যারে রূপান্তরের জন্য সবচেয়ে বেশি ব্যবহৃত কিছু মেথড নিচে দেখানো হলো। উপলব্ধ সব মেথডের সম্পূর্ণ তালিকা MDN ডকুমেন্টেশনে পাওয়া যাবে।

map (পিওর)

আর্গুমেন্ট হিসেবে পাস করা একটি ফাংশন অনুযায়ী প্রতিটি এলিমেন্ট রূপান্তর করে একটি নতুন অ্যারে তৈরি করুন। এই কলব্যাক ফাংশনগুলো প্রায়শই অ্যারো ফাংশন হিসেবে লেখা হয়।

let arr = [1, 2, 3, 4];

const newArr = arr.map((value) => value - 1);
console.log(newArr);
// => [0, 1, 2, 3]
console.log(arr);
// => [1, 2, 3, 4]

লক্ষ্য করার মতো বিষয় হলো, ফলে তৈরি অ্যারেটির দৈর্ঘ্য সবসময় মূল অ্যারেটির সমান হবে।

filter (পিওর)

একটি ফিল্টারিং ফাংশন দেওয়া হলে (যেটি ট্রু রিটার্ন করে যদি এলিমেন্টটি রাখা উচিত হয় এবং ফলস যদি সেটি বাদ দেওয়া উচিত হয়) সেটি দিয়ে বর্তমান অ্যারেটি ফিল্টার করে একটি অ্যারে তৈরি করে।

let arr = [1, 2, 3, 4];

arr.filter((value) => value % 2 === 0);
// => [2, 4]

reduce (পিওর)

একটি ফাংশন ব্যবহার করে অ্যারেটিকে একটি একক মানে নামিয়ে আনে, যে ফাংশনটি প্যারামিটার হিসেবে একটি অ্যাকুমুলেটর এবং অ্যারের বর্তমান এলিমেন্ট নেয়। এই ফাংশনটি নির্দেশ করে বর্তমান এলিমেন্টটি কীভাবে অ্যাকুমুলেটরে যোগ করতে হবে এবং পরবর্তী ইটারেশনে ব্যবহৃত হবে সেই অ্যাকুমুলেটরটি রিটার্ন করে।

let arr = [1, 2, 3, 4];

// Get the sum of elements
arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
// => 10

// Classify the numbers by whether they are odd or not
arr.reduce(
  (accumulator, currentValue) => {
    if (currentValue % 2 === 0) {
      accumulator.even.push(currentValue);
    } else {
      accumulator.odd.push(currentValue);
    }

    return accumulator;
  },
  { even: [], odd: [] },
);
// => { even: [2, 4], odd: [1, 3] }

reverse

একটি অ্যারের এলিমেন্টগুলো উল্টে দেয়।

const arr = [1, 2, 3, 4];

arr.reverse();
// => [4, 3, 2, 1]

এই মেথডটি যে অ্যারের উপর কল করা হয় সেটিকেই পরিবর্তন করে।

slice (পিওর)

একটি শুরুর এবং শেষ ইনডেক্স দেওয়া হলে, যে অ্যারের উপর কল করা হয় সেটি থেকে একটি সাব-অ্যারে তৈরি করে।

শেষ ইনডেক্সের এলিমেন্টটি অন্তর্ভুক্ত হবে না। এছাড়াও, সব প্যারামিটার ঐচ্ছিক: শুরুর ইনডেক্স ডিফল্টভাবে 0, আর শেষ ইনডেক্স ডিফল্টভাবে অ্যারের দৈর্ঘ্য।

const arr = [1, 2, 3, 4];

arr.slice(1, 2); // [2]
arr.slice(1); // [2, 3, 4]
// You can also use negative numbers, that represent the indexes
// starting from the end of the array
arr.slice(-2); // [3, 4]

splice

একটি অ্যারের নতুন এলিমেন্ট সরায় বা প্রতিস্থাপন করে এবং/অথবা যোগ করে। এটি নিচের প্যারামিটারগুলো নেয়:

  • যে এলিমেন্ট থেকে অ্যারে পরিবর্তন শুরু করতে হবে তার ইনডেক্স
  • মুছে ফেলার জন্য এলিমেন্টের সংখ্যা
  • অ্যারেতে সন্নিবেশ করার এলিমেন্টগুলো (ঐচ্ছিক)

splice সরিয়ে ফেলা এলিমেন্টগুলো রিটার্ন করে।

const arr = ['1', '2', '5', '6'];

// Insert an element at index 2
arr.splice(2, 0, '3');
console.log(arr);
// => ['1', '2', '3', '5', '6']

// Remove 2 elements, starting at index 3 and insert 2 elements
const removed = arr.splice(3, 2, '4', '5');
console.log(removed);
// => ['5', '6']
console.log(arr);
// => ['1', '2', '3', '4', '5']

// Remove 1 element at index 1
arr.splice(1, 1);
console.log(arr);
// => ['1', '3', '4', '5']

sort

ডিফল্টভাবে, sort একটি অ্যারের এলিমেন্টগুলোকে প্রথমে স্ট্রিংয়ে রূপান্তর করে এবং তারপর স্ট্রিং তুলনা প্রয়োগ করে সাজায় (দেখুন তুলনা কনসেপ্ট)। সাজানোটি ইন-প্লেস হয়, যার মানে মূল অ্যারেটি পরিবর্তিত হয়। sort সেই পরিবর্তিত অ্যারেটিও রিটার্ন করে, যা সুবিধাজনক যদি আপনি এতে আরও মেথড চেইন করতে চান।

const arr = ['c', 'a', 'z', 'b'];
const result = arr.sort();
console.log(result);
// => ['a', 'b', 'c', 'z']
console.log(arr);
// => ['a', 'b', 'c', 'z']
Caution

সংখ্যা সাজাতে গেলে এই ডিফল্ট আচরণ ভুল ফলাফল দেয়।

const arr = [3, 1, 2, 10];
arr.sort();
// => [1, 10, 2, 3]
// Because the string '10' comes before '2' in dictionary order.

সাজানোর আচরণ কাস্টমাইজ করতে, আপনি আর্গুমেন্ট হিসেবে একটি তুলনা ফাংশন পাস করতে পারেন। তুলনা ফাংশনটি নিজেই দুটি আর্গুমেন্ট দিয়ে কল করা হয়, যেগুলো অ্যারের দুটি এলিমেন্ট। এরপর এটিকে নিচের মানগুলো রিটার্ন করতে হবে:

  • একটি ঋণাত্মক সংখ্যা, যদি প্রথম আর্গুমেন্টটি দ্বিতীয়টির আগে সাজানো উচিত হয়
  • একটি ধনাত্মক সংখ্যা, যদি প্রথম আর্গুমেন্টটি দ্বিতীয়টির পরে সাজানো উচিত হয়
  • 0, যদি এলিমেন্টগুলোর ক্রম একই থাকা উচিত হয়

এভাবে, সঠিক তুলনা ফাংশন পাস করে সংখ্যা সাজানোর সমস্যাটি সমাধান করা যায়।

const arr = [3, 1, 2, 10];
arr.sort((a, b) => a - b);
// => [1, 2, 3, 10]
// "a - b" is negative when b is greater than a, positive when
// a is greater than b and 0 when they are equal.

এখানে একটি উদাহরণ দেওয়া হলো যে কীভাবে একটি কাস্টম তুলনা ফাংশন ব্যবহার করে অবজেক্টের অ্যারে সাজানো যায়।

const arr = [
  { name: 'Lydia', age: 7 },
  { name: 'Anne', age: 34 },
  { name: 'Holger', age: 59 },
];

arr.sort((item1, item2) => {
  if (item1.name < item2.name) {
    return -1;
  }
  if (item1.name > item2.name) {
    return 1;
  }
  return 0;
});
// => [ { name: 'Anne', age: 34 }, { name: 'Holger', age: 59 },
// { name: 'Lydia', age: 7 } ]

২০১৯ সাল থেকে, ভাষার স্পেসিফিকেশন বলে যে সাজানোটি স্টেবল হতে হবে, কিন্তু পারফরম্যান্স (টাইম ও স্পেস কমপ্লেক্সিটি) নিয়ে কোনো নিশ্চয়তা নেই।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

অ্যারে ট্রান্সফরমেশন শিখুন