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

জাভাস্ক্রিপ্টে অ্যারে এলিমেন্ট সর্টিং (Sorting)


JavaScript Array Sorting: সম্পূর্ণ গাইড

JavaScript-এ Array.prototype.sort() মেথড দিয়ে অ্যারে সর্ট করা যায়। ডিফল্টভাবে এটি এলিমেন্টগুলোকে স্ট্রিং मानিয়ে Unicode কোড পয়েন্ট অনুযায়ী অ্যালফাবেটিক্যালি সর্ট করে।

১. বেসিক স্ট্রিং সর্ট (ডিফল্ট)

const arr1 = ["Zebra", "Bear", "Tiger"];
arr1.sort();
console.log(arr1); // [ 'Bear', 'Tiger', 'Zebra' ]

২. নাম্বার সর্ট — সমস্যা ও সমাধান

সমস্যা: ডিফল্ট সর্ট নাম্বারকে স্ট্রিং হিসেবে বুলে (Unicode অনুযায়ী), ফলে ভুল ফলাফল আসে।

const arr2 = [1, 8, 31, 21];
arr2.sort();
console.log(arr2); // [ 1, 21, 31, 8 ] ❌ ভুল!

সমাধান: কম্পার ফাংশন (compare function) দিন যা দুটি আর্গুমেন্ট (a, b) নেয় এবং রিটার্ন করে:

  • নেগেটিভ — a, b-র আগে যাবে
  • পজিটিভ — b, a-র আগে যাবে
  • শূন্য — অর্ডার পরিবর্তন নেই
// Ascending (বর্ধমান)
const arr3 = [1, 8, 31, 21];
arr3.sort((a, b) => a - b);
console.log(arr3); // [ 1, 8, 21, 31 ] ✅

// Descending (হ্রাসমান)
arr3.sort((a, b) => b - a);
console.log(arr3); // [ 31, 21, 8, 1 ] ✅

৩. অবজেক্ট অ্যারে সর্ট (কাস্টম কী দিয়ে)

const people = [
  { name: "Zoe", age: 35 },
  { name: "Richard", age: 21 },
  { name: "Agnes", age: 25 }
];

// নাম অনুযায়ী সর্ট (কেস-ইনসেনসিটিভ)
people.sort((a, b) => {
  const nameA = a.name.toUpperCase();
  const nameB = b.name.toUpperCase();
  if (nameA < nameB) return -1;
  if (nameA > nameB) return 1;
  return 0;
});
console.log(people);
// [ { name: 'Agnes', age: 25 }, { name: 'Richard', age: 21 }, { name: 'Zoe', age: 35 } ]

// বয়স অনুযায়ী সর্ট
people.sort((a, b) => a.age - b.age);
console.log(people);
// [ { name: 'Richard', age: 21 }, { name: 'Agnes', age: 25 }, { name: 'Zoe', age: 35 } ]

৪. লোকাল-অয়ের সর্ট (Locale-aware)

বাংলা বা অন্যান্য ভাষায় সঠিক সর্টের জন্য localeCompare() ব্যবহার করুন:

const bengaliWords = ["কলম", "আম", "কাগজ", "বাতাস"];
bengaliWords.sort((a, b) => a.localeCompare(b, 'bn'));
console.log(bengaliWords); // [ 'আম', 'কাগজ', 'কলম', 'বাতাস' ]

৫. অরিজিনাল অ্যারে পরিবর্তন না করে নতুন সর্টেড অ্যারে পাওয়া

sort() ইন-প্লেস (in-place) সর্ট করে (মুল অ্যারে মিউটেট হয়)। নতুন অ্যারে পেতে:

const original = [3, 1, 2];
const sorted = [...original].sort((a, b) => a - b);
// বা
const sorted2 = original.slice().sort((a, b) => a - b);

console.log(original); // [3, 1, 2] (অপরিবর্তিত)
console.log(sorted);   // [1, 2, 3]

৬. TypeScript-এ টাইপ সেফটি

interface User { name: string; age: number; }
const users: User[] = [{ name: "A", age: 30 }, { name: "B", age: 20 }];
users.sort((a, b) => a.age - b.age); // টাইপ চেক সহ সর্ট

সারসংক্ষেপ: সর্টিং চিটশিট

পরিস্থিতি কোড
স্ট্রিং (ডিফল্ট) arr.sort()
নাম্বার Ascending arr.sort((a,b) => a - b)
নাম্বার Descending arr.sort((a,b) => b - a)
অবজেক্ট প্রপার্টি দিয়ে arr.sort((a,b) => a.prop - b.prop)
স্ট্রিং লোকাল-অয়ের arr.sort((a,b) => a.localeCompare(b, 'bn'))
মুল অ্যারে বদলাতে না চাইলে [...arr].sort(...) বা arr.slice().sort(...)

নোট: sort() মিউটেট করে। ফাংশনাল প্রোগ্রামিং স্টাইলে toSorted() (ES2023+) ব্যবহার করুন যা নতুন অ্যারে রিটার্ন করে।

  1. JavaScript Sort Array: একটি হাও-টু গাইড

  2. জাভাস্ক্রিপ্টে TypedArray.sort() ফাংশন

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

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