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+) ব্যবহার করুন যা নতুন অ্যারে রিটার্ন করে।