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

জাভাস্ক্রিপ্টে মিশ্র নিউমেরিক/আলফানিউমেরিক অ্যারে সর্ট করা


মান লজিয়ে, আমাদের নিচের মতো একটি অ্যালফানিউমেরিক স্ট্রিং-এর অ্যারে আছে −

const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];

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

ফাংশনটি এই অ্যারে-কে inplace সর্ট করবে −

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

সুতরাং, আউটপুট হবে নিচের মতো −

const output = ['1', '2', 'A1', 'A2', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3'];

উদাহরণ

const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
const alphaNumericSort = (arr = []) => {
  const sorter = (a, b) => {
    const isNumber = (v) => (+v).toString() === v;
    const aPart = a.match(/\d+|\D+/g);
    const bPart = b.match(/\d+|\D+/g);
    let i = 0;
    let len = Math.min(aPart.length, bPart.length);
    while (i < len && aPart[i] === bPart[i]) { i++; };
    if (i === len) {
      return aPart.length - bPart.length;
    };
    if (isNumber(aPart[i]) && isNumber(bPart[i])) {
      return aPart[i] - bPart[i];
    };
    return aPart[i].localeCompare(bPart[i]);
  };
  arr.sort(sorter);
};
alphaNumericSort(arr);
console.log(arr);

আউটপুট

কনসোলে আউটপুট হবে −

[
  '1', '2', 'A1',
  'A3', 'A3A', 'A3B',
  'A4', 'A10', 'A11',
  'A12', 'B2', 'B10',
  'F1', 'F3'
]

  1. জাভাস্ক্রিপ্টে নমেরিক সর্ট (numeric sort) কীভাবে করবেন?

  2. জাভাস্ক্রিপ্টে Merge Sort ইমপ্লিমেন্ট করার পদ্ধতি

  3. জাভাস্ক্রিপ্টে ইন্সারশন সোর্ট ইমপ্লিমেন্টেশন

  4. জাভাস্ক্রিপ্টে Array.prototype.sort() মেথড