কম্পিউটার টিউটোরিয়াল

JavaScript-এ অ্যারে এলিমেন্ট অনুযায়ী স্ট্রিং স্প্লিট করা

ভূমিকা

এই সমস্যাটিতে একটি স্ট্রিং এবং একটি সংখ্যা অ্যারে দেওয়া থাকে। অ্যারেতে থাকা সংখ্যাগুলো নির্দেশ করে স্ট্রিংকে কতটুকু করে ভাগ করতে হবে। উদাহরণস্বরূপ, অ্যারে `[2, 4, 5]` মানে প্রথম ২ ক্যারেক্টার, তারপর ৪ ক্যারেক্টার, তারপর ৫ ক্যারেক্টার।

ইনপুট ও আউটপুট

// ইনপুট
const string = 'Javascript splitting string by given array element';
const arr = [2, 4, 5, 1, 3, 1, 2, 3, 7, 2];

// আউটপুট
['Ja', 'vasc', 'ript ', 's', 'pli', 't', 'ti', 'ng ', 'string ', 'by']

সম্পূর্ণ কোড

const string = 'Javascript splitting string by given array element';
const arr = [2, 4, 5, 1, 3, 1, 2, 3, 7, 2];

const splitAtPosition = (str, arr) => {
  const newString = arr.reduce((acc, val) => {
    return {
      start: acc.start + val,
      newArr: acc.newArr.concat(str.substr(acc.start, val))
    };
  }, {
    start: 0,
    newArr: []
  });
  return newString.newArr;
};

console.log(splitAtPosition(string, arr));

কোড ব্যাখ্যা

  • reduce আর্গুমেন্ট: `{ start: 0, newArr: [] }` - আকুমুলেটর অবজেক্ট
  • acc.start: বর্তমান স্ট্রিং পজিশন (শুরু কোথা থেকে)
  • val: বর্তমান চাঙ্ক সাইজ (অ্যারে এলিমেন্ট)
  • str.substr(acc.start, val): স্ট্রিং থেকে সাবস্ট্রিং বের করে
  • রিটার্ন: আপডেটেড `start` এবং `newArr`

আউটপুট

[
  'Ja', 'vasc', 'ript ', 's', 'pli',
  't', 'ti', 'ng ', 'string ', 'by'
]

উন্নত ও আধুনিক পদ্ধতিগুলো

১. substring() ব্যবহার (substr ডিপ্রিকেটেড)

const splitAtPosition = (str, arr) => {
  let start = 0;
  return arr.map(len => {
    const part = str.substring(start, start + len);
    start += len;
    return part;
  });
};

২. for...of লুপ (স্পষ্ট ও দ্রুত)

const splitAtPosition = (str, lengths) => {
  const result = [];
  let index = 0;
  
  for (const len of lengths) {
    result.push(str.slice(index, index + len));
    index += len;
  }
  return result;
};

৩. ভ্যালিডেশন যুক্ত (রোবাস্ট)

const splitAtPositionSafe = (str, lengths) => {
  if (typeof str !== 'string' || !Array.isArray(lengths)) return [];
  
  const totalLength = lengths.reduce((a, b) => a + b, 0);
  if (totalLength > str.length) {
    console.warn('অ্যারে সাইজ স্ট্রিং দৈর্ঘ্যের চেয়ে বড়');
  }
  
  let index = 0;
  return lengths.map(len => {
    const part = str.slice(index, index + len);
    index += len;
    return part;
  });
};

সাবস্ট্রিং মেথড তুলনা

মেথড সিনট্যাক্স নোট
slice str.slice(start, end) নেগেটিভ ইন্ডেক্স সাপোর্ট, প্রস্তাবিত
substring str.substring(start, end) নেগেটিভ হ্যান্ডল করে না, লিগ্যাসি
substr str.substr(start, length) **ডিপ্রিকেটেড**, এড়িয়ে চলুন

ব্যবহারিক অ্যাপ্লিকেশন

  • ফিক্সড-উইডথ পার্সিং: লিগ্যাসি ডেটা ফরম্যাট (COBOL, মেইনফ্রেম)
  • প্রোটোকল পার্সিং: বাইনারি প্রোটোকল হেডার
  • টেক্সট প্রসেসিং: কলাম-ভিত্তিক ডেটা এক্সট্রাকশন

সারাংশ

`reduce()` ব্যবহার করে স্টেটফুল অ্যাকুমুলেশন করা যায়, কিন্তু `for...of` বা `map` với বাহ্যিক ইনডেক্স ভেরিয়েবল বেশি পঠনযোগ্য এবং দ্রুত। `substr` এর বদলে `slice`/`substring` ব্যবহার করুন।

  1. জাভাস্ক্রিপ্ট কোড অ্যারের শেষ এলিমেন্ট প্রিন্ট করার জন্য

  2. জাভাস্ক্রিপ্টে স্ট্রিং অ্যারে থেকে সবচেয়ে ছোট উপাদান খুঁজে বের করা

  3. জাভাস্ক্রিপ্টে অ্যারে গ্রুপে ভাগ করা

  4. জাভাস্ক্রিপ্টে অ্যারে-র মিলে যাওয়া এলিমেন্ট গ্রুপ করা