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

JavaScript-এ অ্যারে থেকে অক্ষর ও সংখ্যা আলাদা করে সর্ট করা

ভূমিকা

মিক্সড টাইপ অ্যারে (নাম্বার এবং স্ট্রিং মিশ্রিত) থেকে সংখ্যা ও স্ট্রিং আলাদা করে, প্রতিটি গ্রুপকে আলাদা আলাদা সর্ট করার পদ্ধতি।

সম্পূর্ণ কোড

const arr = [1, 5, 'fd', 6, 'as', 'a', 'cx', 43, 's', 51, 7];

const sorter = (a, b) => {
  const first = typeof a === 'number';
  const second = typeof b === 'number';
  
  if (first && second) {
    return a - b;           // দুটোই নাম্বার: সংখ্যাসারে সর্ট
  } else if (first && !second) {
    return -1;              // a নাম্বার, b স্ট্রিং: a প্রথমে
  } else if (!first && second) {
    return 1;               // a স্ট্রিং, b নাম্বার: b প্রথমে
  } else {
    return a > b ? 1 : -1;  // দুটোই স্ট্রিং: লেক্সিকোগ্রাফিক্যালি
  }
};

arr.sort(sorter);
console.log(arr);
// আউটপুট: [1, 5, 6, 7, 43, 51, 'a', 'as', 'cx', 'fd', 's']

কোড ব্যাখ্যা

কাস্টম কম্পারেটর ফাংশন `(a, b) => number`:

  • প্রথম টাইপ চেক: `typeof a === 'number'`
  • নাম্বার কে স্ট্রিংয়ের আগে রাখা (return -1 / 1)
  • নাম্বার গ্রুপ: আউটवार্ড সর্ট (`a - b`)
  • স্ট্রিং গ্রুপ: লেক্সিকোগ্রাফিক্যাল সর্ট (`a > b ? 1 : -1`)

আউটপুট

[1, 5, 6, 7, 43, 51, 'a', 'as', 'cx', 'fd', 's']

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

১. Partition + Sort (দুই পাস, বেশি পঠনযোগ্য)

const separateAndSort = (arr) => {
  const numbers = arr.filter(x => typeof x === 'number').sort((a, b) => a - b);
  const strings = arr.filter(x => typeof x === 'string').sort();
  return [...numbers, ...strings];
};

২. Reduce + Sort (এক পাস পার্টিশন)

const separateAndSort = (arr) => {
  const { nums, strs } = arr.reduce((acc, val) => {
    (typeof val === 'number' ? acc.nums : acc.strs).push(val);
    return acc;
  }, { nums: [], strs: [] });
  
  return [...nums.sort((a, b) => a - b), ...strs.sort()];
};

৩. Map + Sort (ফাংশনাল)

const separateAndSort = (arr) => 
  [...arr.filter(x => typeof x === 'number').sort((a,b)=>a-b),
   ...arr.filter(x => typeof x === 'string').sort()];

৪. লোকেল-অযেয়ার স্ট্রিং সর্ট (Intl.Collator)

const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });
const separateAndSort = (arr) => {
  const numbers = arr.filter(x => typeof x === 'number').sort((a, b) => a - b);
  const strings = arr.filter(x => typeof x === 'string').sort(collator.compare);
  return [...numbers, ...strings];
};

টাইপ চেকের উন্নত পদ্ধতি

// Number.isFinite() - NaN, Infinity বাদ
const isNumber = x => typeof x === 'number' && Number.isFinite(x);

// Object.prototype.toString - সঠিক টাইপ চেক
const getType = x => Object.prototype.toString.call(x).slice(8, -1).toLowerCase();

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

  • ফর্ম ভ্যালিডেশন: মিক্সড ইনপুট ফিল্ড প্রসেসিং
  • CSV পার্সিং: কোলাম টাইপ অনুযায়ী সর্ট
  • ডেটা ভিজ্যুয়ালাইজেশন: লেজেন্ড অর্ডারিং
  • API রেসপন্স নর্মালাইজেশন: কনসিস্টেন্ট আউটপুট

সারাংশ

কাস্টম কম্পারেটর কাজ করে, কিন্তু `filter` + `sort` প্যাটার্ন বেশি পঠনযোগ্য, মেইনটেইনযোগ্য এবং ফাংশনাল। টাইপ চেকের জন্য `Number.isFinite()` ব্যবহার করুন।

  1. জাভাস্ক্রিপ্টে অ্যারে থেকে ফলস (false) মানগুলো সরানোর পদ্ধতি

  2. জাভাস্ক্রিপ্ট দিয়ে ফাইল পড়া ও লেখা

  3. জাভাস্ক্রিপ্ট ব্যবহার করে JSON অ্যারে থেকে ডেটা পড়া

  4. জাভাস্ক্রিপ্ট অ্যারে থেকে স্ট্রিং পার্স করা